Python secretsモジュールを使ったパスワード生成

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

上記のサンプルコードでは、変数poolstring.ascii_letters(英字) 、string.digits(数字) 、 string.punctuation(記号)の文字列定数を代入しています。この変数poolに含まれるシーケンスからパスワードの各桁が選択されます。

Pythonの文字列定数は下記のページで紹介しています。

pydocument.hatenablog.com

変数sizeにはパスワードの桁数を指定します。変数sizeの数だけ、secretsモジュールのchoice()メソッドを繰り返し実行しています。

secrets.choice()メソッドについて

サンプルコードで利用しているsecrets.choice(sequence)メソッドは、与えられた空でないシーケンスから要素をランダムに選択して返します。 パスワード生成で利用する場合は、シーケンスの内容に「大文字を含めるか」、「記号を含めるか」などを調整して、必要な条件を満たすように実装します。

実行環境

Python 3.7.0