„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Erstellen eines Passwort-Managers in Go: Teil 2

Erstellen eines Passwort-Managers in Go: Teil 2

Veröffentlicht am 01.11.2024
Durchsuche:712

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. Lass uns eintauchen!

Weiterentwicklung der Projektstruktur

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

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

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)
    }
}

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/[email protected] 15

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)
}

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 


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  0 {
        t.Errorf("Special character was missing in %d / 10000 instances.", splCharMissing)
    }
}

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 Passwortgenerierungsalgorithmus, 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.

Seien 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/]

Merkmale

  • Zufällige Passwörter konfigurierbarer Länge generieren
  • Generierte Passwörter automatisch in die Zwischenablage kopieren
  • Mit Symbolen überspringen

Verwendung

> go build -o dost main.go
Vollbildmodus aufrufenVollbildmodus verlassen

Passwort wird generiert:

> ./dost generate email/[email protected]
Generated Password: );XE,7-Dv?)Aa &

Passwort mit angegebener Länge wird generiert (Standard ist 25):

> ./dost generate email/[email protected] 12
Generated Password: si

Generiertes Passwort ohne Ausdruck in die Zwischenablage kopieren:

> ./dost generate -c email/[email protected] 
Copied to clipboard! ✅

Vermeiden Sie Symbole zum Generieren von Passwörtern:

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

In Entwicklung

  • Geben Sie manuell ein neues Passwort ein
  • Vorhandenes Passwort anzeigen
  • Alle Einträge auflisten
  • Passwortspeicher
  • GPG-Schlüsselbasierte Verschlüsselung

Lizenz

MIT




Ansicht auf GitHub


Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/svemaraju/building-a-password-manager-in-go-part-2-5adf?1 Bei Verstößen wenden Sie sich zum Löschen bitte an [email protected] Es
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3