Maison  >  Article  >  développement back-end  >  Créer un gestionnaire de mots de passe dans Go : partie 2

Créer un gestionnaire de mots de passe dans Go : partie 2

Barbara Streisand
Barbara Streisandoriginal
2024-09-25 06:19:02627parcourir

Bienvenue dans notre parcours de création d'un gestionnaire de mots de passe dans Go ! Dans ce deuxième volet, nous explorerons les progrès que nous avons réalisés depuis notre engagement initial. Nous avons ajouté de nouvelles fonctionnalités, amélioré la structure du code et implémenté des tests. Allons-y !

Faire évoluer la structure du projet

L'un des premiers changements que vous remarquerez est la structure améliorée du projet. Nous avons séparé notre code en plusieurs fichiers et packages, en suivant les meilleures pratiques de Go :

dost/
.
├── LICENSE
├── README.md
├── go.mod
├── go.sum
├── internal
│   ├── internal_test.go
│   └── passgen.go
└── main.go

Cette structure permet une meilleure organisation et maintenabilité à mesure que notre projet se développe.

Interface de ligne de commande améliorée

Nous avons considérablement amélioré notre CLI, la rendant plus flexible et conviviale. Voici un extrait de notre main.go :

func main() {
    generateCmd := flag.NewFlagSet("generate", flag.ExitOnError)
    flag.Parse()

    switch os.Args[1] {
    case "generate":
        internal.Generate(generateCmd)
    }
}

Cette configuration autorise les sous-commandes, prenant actuellement en charge la commande generate. Les utilisateurs peuvent désormais interagir avec notre outil comme ceci :

go run main.go generate email/reachme@example.com 15

Génération de mot de passe personnalisable

Nous avons ajouté des options pour personnaliser la génération de mot de passe. Les utilisateurs peuvent désormais spécifier la longueur du mot de passe et choisir d'exclure les caractères spéciaux :

func Generate(generateFlags *flag.FlagSet) {
    generateFlags.BoolVar(&noSymbols, "n", false, "Skip symbols while generating password")
    generateFlags.BoolVar(&copyToClipBoard, "c", false, "Copy to clipboard.")
    generateFlags.Parse(os.Args[2:])
    passwordLength := 25
    // ... (code to parse custom length)

    password, err := generatePassword(passwordLength, noSymbols)
    // ... (code to handle password output)
}

Cette fonction permet aux utilisateurs d'utiliser des indicateurs comme -n pour exclure les symboles et -c pour copier le mot de passe dans le presse-papiers au lieu de l'afficher.

Algorithme de génération de mot de passe amélioré

Nous avons affiné notre fonction de génération de mot de passe pour gérer les nouvelles options de personnalisation :

func generatePassword(length int, noSymbols bool) (string, error) {
    const (
        uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
        digits           = "0123456789"
        specialChars     = "!@#$%^&*()-_=+[]{}|;:'\",.a8093152e673feb7aba1828c43532094/?"
    )

    allChars := uppercaseLetters + lowercaseLetters + digits
    if !noSymbols {
        allChars += specialChars
    }

    var password string
    for i := 0; i 24321a648845e6c19b663556eed87548 0 {
        t.Errorf("Special character was missing in %d / 10000 instances.", splCharMissing)
    }
}

Ces tests vérifient la longueur correcte du mot de passe et l'inclusion de caractères spéciaux. Il est intéressant de noter que notre test des caractères spéciaux a révélé un point à améliorer : sur 10 000 mots de passe générés, 234 ne contenaient pas de caractères spéciaux. Cela nous donne une direction claire pour notre prochain raffinement.

Quelle est la prochaine étape ?

Bien que nous ayons réalisé des progrès significatifs, il reste encore place à l'amélioration :

  1. Affinez l'algorithme de génération de mot de passe pour garantir l'inclusion cohérente des caractères spéciaux.
  2. Implémentez la fonctionnalité de stockage des mots de passe.
  3. Ajoutez le cryptage pour les mots de passe stockés.
  4. Développer des fonctionnalités de recherche et de récupération.

Restez à l'écoute pour la prochaine partie de notre série, où nous relèverons ces défis et continuerons à faire évoluer notre gestionnaire de mots de passe !

N'oubliez pas que le code source complet est disponible sur GitHub. N'hésitez pas à cloner, bifurquer et contribuer au projet. Vos commentaires et contributions sont toujours les bienvenus !

Bon codage et restez en sécurité ! ??

Building a Password Manager in Go: Part 2 svemaraju / faire

gestionnaire de mots de passe en ligne de commande dost écrit en Go

dost

dost est un gestionnaire de mots de passe CLI écrit en Go.

Inspiré par (Pass)[https://www.passwordstore.org/]

Caractéristiques

  • Générer des mots de passe aléatoires de longueur configurable
  • Copier automatiquement les mots de passe générés dans le presse-papiers
  • Passer à l'aide de symboles

Utilisation

> go build -o dost main.go
Entrez en mode plein écran Quitter le mode plein écran

Generating password:

> ./dost generate -c email/vema@example.com 
Copied to clipboard! ✅

Avoid symbols for generating passwords:

> ./dost generate -n email/vema@example.com 
Generated Password: E2UST}^{Ac[Fb&D|cD%;Eij>H

Under development

  • Insert a new password manually
  • Show an existing password
  • List all entries
  • Password storage
  • GPG Key based encryption

License

MIT




View on GitHub


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn