首頁  >  文章  >  後端開發  >  在 Go 中建立密碼管理器:第 2 部分

在 Go 中建立密碼管理器:第 2 部分

Barbara Streisand
Barbara Streisand原創
2024-09-25 06:19:02741瀏覽

歡迎回到我們用 Go 建立密碼管理器的旅程!在第二部分中,我們將探討自初次提交以來我們所取得的進展。我們添加了新功能,改進了程式碼結構並實施了測試。讓我們潛入吧!

改進專案結構

您會注意到的第一個變化是改進的專案結構。我們遵循 Go 的最佳實踐,將程式碼分成多個檔案和套件:

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

隨著我們專案的發展,這種結構可以實現更好的組織和可維護性。

增強的命令列介面

我們顯著改進了 CLI,使其更加靈活且用戶友好。這是我們 main.go 的片段:

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

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

此設定允許使用子命令,目前支援產生命令。使用者現在可以像這樣與我們的工具互動:

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

可自訂的密碼生成

我們新增了自訂密碼產生的選項。使用者現在可以指定密碼長度並選擇排除特殊字元:

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

此功能允許使用者使用 -n 等標誌來排除符號,使用 -c 將密碼複製到剪貼簿而不是顯示它。

改進的密碼產生演算法

我們改進了密碼產生功能以處理新的自訂選項:

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

這些測試檢查密碼長度是否正確以及是否包含特殊字元。有趣的是,我們的特殊字元測試揭示了一個需要改進的地方:在 10,000 個生成的密碼中,有 234 個不包含特殊字元。這為我們下一步的改進提供了明確的方向。

接下來是什麼?

雖然我們取得了重大進展,但仍有改進的空間:

  1. 完善密碼產生演算法,確保特殊字元的一致包含。
  2. 實作密碼儲存功能。
  3. 為儲存的密碼新增加密。
  4. 開發搜尋和檢索功能。

請繼續關注我們系列的下一部分,我們將解決這些挑戰並繼續改進我們的密碼管理器!

請記住,完整的原始碼可以在 GitHub 上找到。請隨意克隆、分叉並為該專案做出貢獻。隨時歡迎您的回饋和貢獻!

祝您編碼愉快,並保持安全! ??

Building a Password Manager in Go: Part 2 斯韋馬拉朱 / 多斯特

用 Go 寫的 dost 命令列密碼管理器

多斯特

dost 是一個用 Go 寫的 CLI 密碼管理器。

靈感來自(通行證)[https://www.passwordstore.org/]

特點

  • 產生可設定長度的隨機密碼
  • 自動將產生的密碼複製到剪貼簿
  • 跳過使用符號

用法

> go build -o dost main.go
進入全螢幕模式 退出全螢幕模式

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


以上是在 Go 中建立密碼管理器:第 2 部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn