Documentation développeur
Go
Mis à jour le 19 septembre 2026

Générer des mots de passe sûrs en Go

Générez des mots de passe aléatoires avec une source cryptographiquement sûre et sans biais de modulo en Go.

Un générateur de mots de passe doit utiliser le générateur aléatoire cryptographiquement sûr de la plateforme ou du système d’exploitation. N’utilisez pas les générateurs pseudo-aléatoires prévus pour les simulations ou les effets d’interface.

Démarrage rapide#

L’exemple suivant utilise l’API standard de Go ou une bibliothèque couramment utilisée pour cette tâche.

Exemple#

Go
1package main23import (4    "crypto/rand"5    "fmt"6    "math/big"7)89func password(length int, alphabet string) (string, error) {10    out := make([]byte, length)11    max := big.NewInt(int64(len(alphabet)))12    for i := range out {13        n, err := rand.Int(rand.Reader, max)14        if err != nil { return "", err }15        out[i] = alphabet[n.Int64()]16    }17    return string(out), nil18}1920func main() {21    p, err := password(, "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789!@#$%")22    if err != nil { panic(err) }23    fmt.Println(p)24}

Opérations courantes#

Ce second exemple couvre une opération fréquente en production ou une manière plus sûre de traiter des entrées réelles.

Variante courante#

Go
1buf := make([]byte, )2if _, err := rand.Read(buf); err != nil {3    return err4}5token := base64.RawURLEncoding.EncodeToString(buf)

Points importants#

Utilisez uniquement un CSPRNG pour les mots de passe, jetons et codes de récupération. La génération et le stockage des mots de passe sont deux problèmes distincts.

Bonnes pratiques#

  1. Considérez toute entrée externe comme non fiable et gérez explicitement les erreurs d’analyse ou de validation.
  2. Rendez explicites l’encodage, les unités, les formats et les conventions propres aux bibliothèques aux frontières du système.
  3. Ajoutez des tests couvrant l’entrée vide, le texte Unicode, les entrées invalides et des données représentatives de la production.

Références#

Implémenter Password dans d'autres langages :