Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Membina Pengurus Kata Laluan dalam Go: Bahagian 2

Membina Pengurus Kata Laluan dalam Go: Bahagian 2

Barbara Streisand
Barbara Streisandasal
2024-09-25 06:19:02626semak imbas

Selamat datang kembali ke perjalanan kami membina pengurus kata laluan dalam Go! Dalam ansuran kedua ini, kami akan meneroka kemajuan yang telah kami buat sejak komitmen awal kami. Kami telah menambah ciri baharu, menambah baik struktur kod dan melaksanakan ujian. Jom terjun!

Membangunkan Struktur Projek

Salah satu perubahan pertama yang anda akan perhatikan ialah struktur projek yang dipertingkatkan. Kami telah mengasingkan kod kami kepada berbilang fail dan pakej, mengikut amalan terbaik Go:

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

Struktur ini membolehkan organisasi dan kebolehselenggaraan yang lebih baik semasa projek kami berkembang.

Antara Muka Baris Perintah Dipertingkat

Kami telah meningkatkan CLI kami dengan ketara, menjadikannya lebih fleksibel dan mesra pengguna. Berikut ialah coretan daripada main.go kami:

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

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

Persediaan ini membenarkan subperintah, yang kini menyokong perintah jana. Pengguna kini boleh berinteraksi dengan alat kami seperti ini:

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

Penjanaan Kata Laluan yang boleh disesuaikan

Kami telah menambah pilihan untuk menyesuaikan penjanaan kata laluan. Pengguna kini boleh menentukan panjang kata laluan dan memilih untuk mengecualikan aksara khas:

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

Fungsi ini membolehkan pengguna menggunakan bendera seperti -n untuk mengecualikan simbol dan -c untuk menyalin kata laluan ke papan keratan dan bukannya memaparkannya.

Algoritma Penjanaan Kata Laluan yang Diperbaiki

Kami telah memperhalusi fungsi penjanaan kata laluan kami untuk mengendalikan pilihan penyesuaian baharu:

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

Ujian ini menyemak panjang kata laluan yang betul dan kemasukan aksara khas. Menariknya, ujian aksara khas kami mendedahkan kawasan untuk penambahbaikan: dalam 10,000 kata laluan yang dijana, 234 tidak mengandungi aksara khas. Ini memberi kita hala tuju yang jelas untuk pemurnian seterusnya.

Apa Seterusnya?

Walaupun kami telah mencapai kemajuan yang ketara, masih ada ruang untuk penambahbaikan:

  1. Perhalusi algoritma penjanaan kata laluan untuk memastikan kemasukan aksara khas yang konsisten.
  2. Laksanakan fungsi storan kata laluan.
  3. Tambahkan penyulitan untuk kata laluan yang disimpan.
  4. Membangunkan ciri carian dan dapatkan semula.

Nantikan bahagian seterusnya siri kami, di mana kami akan menangani cabaran ini dan terus mengembangkan pengurus kata laluan kami!

Ingat, kod sumber penuh tersedia di GitHub. Jangan ragu untuk mengklon, membuat garpu dan menyumbang kepada projek itu. Maklum balas dan sumbangan anda sentiasa dialu-alukan!

Selamat pengekodan, dan kekal selamat! ??

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

pengurus kata laluan baris arahan dost ditulis dalam Go

selesai

dost ialah pengurus kata laluan CLI yang ditulis dalam Go.

Diinspirasikan oleh (Pass)[https://www.passwordstore.org/]

Ciri

  • Jana kata laluan rawak dengan panjang boleh dikonfigurasikan
  • Salin kata laluan yang dijana ke papan keratan secara automatik
  • Langkau menggunakan simbol

Penggunaan

> go build -o dost main.go
Masukkan mod skrin penuh Keluar daripada mod skrin penuh

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


Atas ialah kandungan terperinci Membina Pengurus Kata Laluan dalam Go: Bahagian 2. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn