Erstellen eines Passwort-Managers in Go

DDD
Freigeben: 2024-09-18 20:17:30
Original
884 Leute haben es durchsucht

Als Softwareentwickler war ich schon immer von der Schnittstelle zwischen Sicherheit und Benutzerfreundlichkeit fasziniert. Vor kurzem habe ich beschlossen, ein spannendes Projekt in Angriff zu nehmen: die Erstellung eines Befehlszeilen-Passwort-Managers mit Go. Ich möchte den Beginn dieser Reise mit Ihnen teilen, beginnend mit dem allerersten Commit.

Die Genesis

Am 27. November 2023 habe ich die erste Zusage für mein Projekt gemacht, das ich „dost“ (Freund auf Hindi, was seine Rolle als hilfreicher Begleiter bei der Passwortverwaltung widerspiegelt) genannt habe. Dieser erste Schritt ist zwar klein, legt aber den Grundstein für ein hoffentlich robustes und benutzerfreundliches Tool.

Inspiration und Vision

Building a Password Manager in Go

Als ich dieses Projekt in Angriff nahm, ließ ich mich vom beliebten Befehlszeilen-Passwort-Manager Pass inspirieren. Die Einfachheit und Effektivität von Pass erregte meine Aufmerksamkeit und ich beschloss, seine API als Vorlage für die Erstellung meines eigenen Passwort-Managers in Go zu verwenden.

Das Eintauchen in den Quellcode von Pass war eine augenöffnende Erfahrung. Ich war fasziniert, als ich herausfand, dass die gesamte Funktionalität dieses weit verbreiteten Tools in einem umfassenden Bash-Skript gekapselt ist. Diese elegante Einfachheit bewundere ich und hoffe, sie in meinem eigenen Projekt nachzuahmen, wenn auch unter Nutzung der Stärken von Go.

Durch das Studium von pass habe ich wertvolle Einblicke in die wesentlichen Funktionen eines Befehlszeilen-Passwort-Managers und die Benutzererfahrung gewonnen, die er bieten sollte. Während ich „dost“ weiterentwickle, werde ich diese Lektionen im Hinterkopf behalten, mit dem Ziel, ein Tool zu schaffen, das die Einfachheit von Pass mit der Leistung und den plattformübergreifenden Kompatibilitätsvorteilen von Go verbindet.

Diese Erkundung hat nicht nur einen Fahrplan für die zu implementierenden Funktionen geliefert, sondern auch meinen Glauben an die Leistungsfähigkeit gut gestalteter, zielgerichteter Tools gestärkt. Ich bin gespannt, wie diese Inspiration die Entwicklung von „dost“ in den kommenden Entwicklungsstufen prägen wird.

Erste Features

Der erste Commit konzentrierte sich auf zwei Kernfunktionen:

  1. Passwortgenerierung: Ich habe einen einfachen Passwortgenerator implementiert, der es Benutzern ermöglicht, die gewünschte Passwortlänge anzugeben. Diese Funktion zielt darauf ab, sichere, zufällige Passwörter zu erstellen, die auf verschiedene Sicherheitsanforderungen zugeschnitten sind.

  2. Zwischenablage-Integration: Um die Benutzererfahrung zu verbessern, habe ich dafür gesorgt, dass das generierte Passwort automatisch in die Zwischenablage kopiert wird. Diese kleine, aber entscheidende Funktion spart Zeit und verringert das Risiko von Transkriptionsfehlern.

Technische Einblicke

Lassen Sie uns auf einige der technischen Aspekte dieser ersten Iteration eingehen:

  • Go-Version: Das Projekt wird mit Go 1.21.0 erstellt und nutzt die Einfachheit und Effizienz der Sprache.
  • Externe Abhängigkeiten: Ich verwende das Paket github.com/atotto/clipboard, um Zwischenablagevorgänge über verschiedene Betriebssysteme hinweg nahtlos abzuwickeln.
  • Zufallsgenerierung: Die Passwortgenerierung nutzt das Crypto/Rand-Paket von Go für die sichere Zufallszahlengenerierung, die für die Erstellung unvorhersehbarer und sicherer Passwörter von entscheidender Bedeutung ist.
  • Zeichensatz: Der Passwortgenerator enthält Groß- und Kleinbuchstaben, Ziffern und eine Vielzahl von Sonderzeichen, um die Komplexität zu gewährleisten.

Codeausschnitte

Sehen wir uns einige wichtige Teile der Implementierung an:

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

    allChars := uppercaseLetters + lowercaseLetters + digits + specialChars

    var password string
    for i := 0; i < length; i++ {
        randomIndex, err := rand.Int(rand.Reader, big.NewInt(int64(len(allChars))))
        if err != nil {
            return "", err
        }
        password += string(allChars[randomIndex.Int64()])
    }

    return password, nil
}
Nach dem Login kopieren

Diese Funktion erstellt ein Passwort, indem sie zufällig Zeichen aus einem vordefinierten Satz auswählt und dabei eine Mischung aus Großbuchstaben, Kleinbuchstaben, Ziffern und Sonderzeichen gewährleistet.

  1. Zwischenablage-Integration:
func writeToClipboard(text string) error {
    return clipboard.WriteAll(text)
}
Nach dem Login kopieren

Diese einfache Funktion nutzt das Clipboard-Paket, um das generierte Passwort in die Systemzwischenablage zu schreiben.

  1. Hauptfunktion:
func main() {
    passwordLength := flag.Int("length", 12, "length of your password")
    flag.Parse()

    password, err1 := generatePassword(*passwordLength)
    if err1 != nil {
        fmt.Println("Error generating password:", err1)
        return
    }

    fmt.Println("Generated Password:", password)

    err2 := writeToClipboard(password)
    if err2 != nil {
        fmt.Println("Error writing to clipboard:", err2)
        os.Exit(1)
    }

    fmt.Println("Copied to clipboard! ✅\n")
}
Nach dem Login kopieren

Die Hauptfunktion verbindet alles miteinander. Es verwendet das Flag-Paket von Go, um Benutzern die Angabe der Passwortlänge zu ermöglichen, generiert das Passwort und kopiert es in die Zwischenablage.

Befehlszeilenschnittstelle

Wie Sie in der Hauptfunktion sehen können, habe ich eine einfache CLI mithilfe des Flag-Pakets von Go implementiert. Benutzer können die gewünschte Passwortlänge mithilfe des Flags -length angeben. Wenn nicht angegeben, beträgt der Standardwert 12 Zeichen.

Blick nach vorn

Dieses erste Commit ist erst der Anfang. Während ich diesen Passwort-Manager weiterentwickle, plane ich, Funktionen hinzuzufügen wie:

  • Secure storage of passwords
  • Encryption of stored data
  • Search and retrieval functionalities
  • Password strength analysis

I'm excited about the journey ahead and the challenges it will bring. Building a password manager is not just about coding; it's about understanding security principles, user needs, and creating a tool that people can trust with their sensitive information.

Stay tuned for more updates as this project evolves. I'll be sharing my progress, challenges, and learnings along the way. If you're interested in following along or contributing, feel free to check out the project on GitHub.

Building a Password Manager in Go svemaraju / dost

dost command line password manager written in Go

dost

dost is a CLI password manager written in Go.

Inspired by (Pass)[https://www.passwordstore.org/]

Features

  • Generate random passwords of configurable length
  • Copy generated passwords to clipboard automatically
  • Skip using symbols

Usage

> go build -o dost main.go
Nach dem Login kopieren
Enter fullscreen mode Exit fullscreen mode

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. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage