Python 3.6以降では、secretsモジュールを利用して乱数を生成することができます。 randomモジュールの擬似乱数に比べ、暗号学的に強い乱数となるため、パスワードの生成に適しています。
Pythonでパスワード生成するサンプルコード
英数文字列、記号の組み合わせから8桁のパスワードを生成する例
import secrets import string def get_pass(): # パスワードの桁数 size = 8 # 英数文字列(大文字含む)、記号から選択 pool = string.ascii_letters + string.digits + string.punctuation password = ''.join([secrets.choice(pool) for _ in range(size)]) return password if __name__ == '__main__': print(get_pass())
上記のサンプルコードでは、変数pool
にstring.ascii_letters
(英字) 、string.digits
(数字) 、 string.punctuation
(記号)の文字列定数を代入しています。この変数pool
に含まれるシーケンスからパスワードの各桁が選択されます。
Pythonの文字列定数は下記のページで紹介しています。
変数size
にはパスワードの桁数を指定します。変数size
の数だけ、secretsモジュールのchoice()
メソッドを繰り返し実行しています。
secrets.choice()
メソッドについて
サンプルコードで利用しているsecrets.choice(sequence)
メソッドは、与えられた空でないシーケンスから要素をランダムに選択して返します。
パスワード生成で利用する場合は、シーケンスの内容に「大文字を含めるか」、「記号を含めるか」などを調整して、必要な条件を満たすように実装します。
実行環境
Python 3.7.0