パスワード ジェネレーターを構築した後、いくつかの素晴らしいレビューを受け取りましたが、そのうちの 2 つが私にとって際立ったものでした。Guillaume Ste-Marie はランダム性を高めるためにシードを使用することを提唱し、Christian Ledermann もその秘密を主張しました。ランダムは実際にはランダムではないため、ランダムを置き換える必要があります。
シークレット モジュールは、パスワード、アカウント認証、セキュリティ トークン、関連するシークレットなどのデータの管理に適した、暗号的に強力な乱数を生成します。
まず、安全なパスワード ジェネレーターのコード全体を見てみましょう。威圧的に見えても心配する必要はありません。次のセクションで 1 行ずつ詳しく説明します。
import secrets import string def generate_password(length=12): characters = string.ascii_letters + string.digits + string.punctuation password = ''.join(secrets.choice(characters) for _ in range(length)) return password def main(): print("Welcome to the Secure Password Generator!") try: length = int(input("Enter the desired password length: ")) if length <= 0: raise ValueError("Password length must be positive") except ValueError as e: print(f"Invalid input: {e}") print("Using default length of 12 characters.") length = 12 password = generate_password(length) print(f"\nYour generated password is: {password}") if __name__ == "__main__": main()
ここで、これを分解して各部分を詳しく調べてみましょう。
import secrets import string
これらの 2 行は、安全なパスワード ジェネレーターに必要なモジュールをインポートします。
Secrets モジュールは、パスワードなどの秘密の管理に適した暗号的に強力な乱数を生成する機能を提供します。暗号化目的のランダム モジュールよりも安全です。
文字列モジュールは、さまざまなタイプの文字 (文字、数字、句読点) を含む定数を提供します。これにより、パスワードに必要なすべての文字を手動で入力する手間が省けます。
def generate_password(length=12): characters = string.ascii_letters + string.digits + string.punctuation password = ''.join(secrets.choice(characters) for _ in range(length)) return password
この関数は安全なパスワードを生成します:
パスワードに使用できるすべての文字を含む文字列を作成します。
secrets.choice() を使用して、この文字列から文字をランダムに選択します。これは、オペレーティング システムの暗号的に安全な乱数生成機能を使用するため、random.choice() を使用するよりも安全です。
これらの文字を 1 つの文字列に結合してパスワードを形成します。
def main(): print("Welcome to the Secure Password Generator!") try: length = int(input("Enter the desired password length: ")) if length <= 0: raise ValueError("Password length must be positive") except ValueError as e: print(f"Invalid input: {e}") print("Using default length of 12 characters.") length = 12 password = generate_password(length) print(f"\nYour generated password is: {password}")
この関数はユーザー対話を処理します:
if __name__ == "__main__": main()
このブロックは、スクリプトがモジュールとしてインポートされた場合ではなく、スクリプトが直接実行された場合にのみ main() 関数が呼び出されるようにします。
パスワード ジェネレーターをさらに改善するためのアイデアをいくつか紹介します。
ランダムの代わりに Secrets モジュールを使用することで、より安全なパスワード ジェネレーターを作成しました。
以上がSecret Lib を使用して安全な Python パスワード ジェネレーターを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。