ソフトウェア開発者として、私は常にセキュリティとユーザビリティの交差点に魅了されてきました。最近、私は Go を使用してコマンドライン パスワード マネージャーを作成するというエキサイティングなプロジェクトに着手することにしました。最初のコミットから、この旅の始まりを皆さんと共有したいと思います。
2023 年 11 月 27 日に、私はプロジェクトの最初のコミットを行いました。このプロジェクトに「dost」(ヒンディー語で友人を意味し、パスワード管理の役立つ仲間としての役割を反映) と名付けました。この最初のステップは小さいですが、堅牢でユーザーフレンドリーなツールになることを期待するものの基礎を築きます。
このプロジェクトに着手する際、私は人気のあるコマンドライン パスワード マネージャー パスからインスピレーションを得ました。 pass のシンプルさと有効性に私の注意を引き、Go で独自のパスワード マネージャーを構築するための青写真としてその API を使用することにしました。
パスのソースコードに飛び込むのは、目を見張るような経験でした。私は、この広く使用されているツールの機能全体が 1 つの包括的な Bash スクリプトにカプセル化されていることを発見して興味をそそられました。このエレガントなシンプルさは私が賞賛しており、Go の長所を利用しながらも、自分のプロジェクトで模倣したいと考えています。
パスを勉強することで、コマンドライン パスワード マネージャーの重要な機能と、それが提供すべきユーザー エクスペリエンスについて貴重な洞察を得ることができました。 「dost」の開発を続ける際には、これらの教訓を念頭に置き、パスのシンプルさと Go のパフォーマンスおよびクロスプラットフォーム互換性の利点を組み合わせたツールの作成を目指します。
この調査は、実装する機能のロードマップを提供しただけでなく、よく作られた焦点を絞ったツールの力に対する私の信念を強化しました。このインスピレーションが今後の開発段階で「dost」の進化をどのように形作るのか楽しみです。
最初のコミットは 2 つのコア機能に焦点を当てました:
パスワード生成: ユーザーが希望するパスワードの長さを指定できるようにする基本的なパスワード ジェネレーターを実装しました。この機能は、さまざまなセキュリティ要件に合わせて調整された強力なランダム化されたパスワードを作成することを目的としています。
クリップボードの統合: ユーザー エクスペリエンスを向上させるために、生成されたパスワードがクリップボードに自動的にコピーされるようにしました。この小さいながらも重要な機能により、時間が節約され、転記エラーのリスクが軽減されます。
この最初のイテレーションの技術的側面のいくつかを詳しく見てみましょう:
実装の重要な部分をいくつか見てみましょう:
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 }
この関数は、事前定義されたセットから文字をランダムに選択して、大文字、小文字、数字、特殊文字を確実に組み合わせてパスワードを作成します。
func writeToClipboard(text string) error { return clipboard.WriteAll(text) }
この単純な関数は、クリップボード パッケージを利用して、生成されたパスワードをシステム クリップボードに書き込みます。
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") }
main 関数はすべてを結び付けます。 Go のフラグ パッケージを使用して、ユーザーがパスワードの長さを指定し、パスワードを生成してクリップボードにコピーできるようにします。
メイン関数でわかるように、Go の flag パッケージを使用して簡単な CLI を実装しました。ユーザーは、-length フラグを使用して希望のパスワードの長さを指定できます。指定しない場合、デフォルトは 12 文字です。
この最初のコミットは始まりにすぎません。このパスワード マネージャーの開発を続ける中で、次のような機能を追加する予定です。
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.
dost is a CLI password manager written in Go.
Inspired by (Pass)[https://www.passwordstore.org/]
> go build -o dost main.go
Generating password:
> ./dost generate email/vema@example.com Generated Password: );XE,7-Dv?)Aa+&<{V-|pKuq5
Generating password with specified length (default is 25):
> ./dost generate email/vema@example.com 12 Generated Password: si<yJ=5/lEb3
Copy generated password to clipboard without printing:
> ./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
MIT
以上がGo でパスワード マネージャーを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。