Heim > Backend-Entwicklung > Golang > Erstellen eines Passwort-Managers in Go: Teil 2

Erstellen eines Passwort-Managers in Go: Teil 2

Barbara Streisand
Freigeben: 2024-09-25 06:19:02
Original
778 Leute haben es durchsucht

Willkommen zurück auf unserer Reise zum Erstellen eines Passwort-Managers in Go! In dieser zweiten Folge werden wir die Fortschritte untersuchen, die wir seit unserem ersten Commit gemacht haben. Wir haben neue Funktionen hinzugefügt, die Codestruktur verbessert und Tests implementiert. Lasst uns eintauchen!

Weiterentwicklung der Projektstruktur

Eine der ersten Änderungen, die Sie bemerken werden, ist die verbesserte Projektstruktur. Wir haben unseren Code in mehrere Dateien und Pakete aufgeteilt und dabei die Best Practices von Go befolgt:

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

Diese Struktur ermöglicht eine bessere Organisation und Wartbarkeit, wenn unser Projekt wächst.

Erweiterte Befehlszeilenschnittstelle

Wir haben unsere CLI erheblich verbessert und sie flexibler und benutzerfreundlicher gemacht. Hier ist ein Ausschnitt aus unserem main.go:

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

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

Dieses Setup ermöglicht Unterbefehle und unterstützt derzeit den Befehl „generate“. Benutzer können jetzt wie folgt mit unserem Tool interagieren:

go run main.go generate email/reachme@example.com 15
Nach dem Login kopieren

Anpassbare Passwortgenerierung

Wir haben Optionen zum Anpassen der Passwortgenerierung hinzugefügt. Benutzer können jetzt die Passwortlänge angeben und Sonderzeichen ausschließen:

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)
}
Nach dem Login kopieren

Mit dieser Funktion können Benutzer Flags wie -n zum Ausschließen von Symbolen und -c verwenden, um das Passwort in die Zwischenablage zu kopieren, anstatt es anzuzeigen.

Verbesserter Algorithmus zur Passwortgenerierung

Wir haben unsere Funktion zur Passwortgenerierung verfeinert, um die neuen Anpassungsoptionen zu berücksichtigen:

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

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

    var password string
    for i := 0; i < length; i++ {
    // Generate a random index to select a character from allChars
    randomIndex, err := rand.Int(rand.Reader, big.NewInt(int64(len(allChars))))
    if err != nil {
        return "", err
    }

    // Append the randomly selected character to the password
    password += string(allChars[randomIndex.Int64()])
    }

    return password, nil
}
Nach dem Login kopieren

Diese Funktion berücksichtigt jetzt das noSymbols-Flag und ermöglicht so eine flexiblere Passwortgenerierung.

Tests durchführen

Wir haben durch die Implementierung von Tests einen wichtigen Schritt zur Sicherstellung der Zuverlässigkeit unseres Codes gemacht. Hier ist ein Ausschnitt aus unserer Testdatei:

func TestPasswordLength(t *testing.T) {
    password, err := generatePassword(10, true)
    if err != nil {
        t.Errorf("Expected no error, got %v", err)
    } else {
        if len(password) != 10 {
            t.Errorf("Expected 10 character password, got %d", len(password))
        }
    }
}

func TestSpecialCharacter10K(t *testing.T) {
    splCharMissing := 0
    for i := 1; i <= 10000; i++ {
        password, err := generatePassword(10, false)
        // ... (code to check for special characters)
    }
    if splCharMissing > 0 {
        t.Errorf("Special character was missing in %d / 10000 instances.", splCharMissing)
    }
}
Nach dem Login kopieren

Diese Tests prüfen die korrekte Passwortlänge und die Einbeziehung von Sonderzeichen. Interessanterweise hat unser Sonderzeichentest einen Bereich mit Verbesserungspotenzial aufgedeckt: Von 10.000 generierten Passwörtern enthielten 234 keine Sonderzeichen. Dies gibt uns eine klare Richtung für unsere nächste Verfeinerung.

Was kommt als nächstes?

Obwohl wir erhebliche Fortschritte gemacht haben, gibt es noch Raum für Verbesserungen:

  1. Verfeinern Sie den Algorithmus zur Passwortgenerierung, um eine konsistente Einbeziehung von Sonderzeichen sicherzustellen.
  2. Passwortspeicherfunktion implementieren.
  3. Verschlüsselung für gespeicherte Passwörter hinzufügen.
  4. Such- und Abruffunktionen entwickeln.

Bleiben Sie gespannt auf den nächsten Teil unserer Serie, in dem wir uns diesen Herausforderungen stellen und unseren Passwort-Manager weiterentwickeln!

Denken Sie daran, dass der vollständige Quellcode auf GitHub verfügbar ist. Fühlen Sie sich frei, das Projekt zu klonen, zu forken und dazu beizutragen. Ihr Feedback und Ihre Beiträge sind immer willkommen!

Viel Spaß beim Codieren und bleiben Sie sicher! ??

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

dost-Befehlszeilen-Passwort-Manager, geschrieben in Go

dost

dost ist ein in Go geschriebener CLI-Passwort-Manager.

Inspiriert von (Pass)[https://www.passwordstore.org/]

Funktionen

  • Zufällige Passwörter konfigurierbarer Länge generieren
  • Generierte Passwörter automatisch in die Zwischenablage kopieren
  • Überspringen Sie die Verwendung von Symbolen

Verwendung

> go build -o dost main.go
Nach dem Login kopieren
Vollbildmodus aufrufen Vollbildmodus verlassen

Generating password:

> ./dost generate email/vema@example.com
Generated Password: );XE,7-Dv?)Aa+&<{V-|pKuq5
Nach dem Login kopieren

Generating password with specified length (default is 25):

> ./dost generate email/vema@example.com 12
Generated Password: si<yJ=5/lEb3
Nach dem Login kopieren

Copy generated password to clipboard without printing:

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

Avoid symbols for generating passwords:

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

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


Das obige ist der detaillierte Inhalt vonErstellen eines Passwort-Managers in Go: Teil 2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage