今回やること
Pythonでパスワード候補を生成する場合は、予測されにくい乱数を扱う secrets を使います。学習やゲーム向けの random は、認証情報の生成には使いません。
ランダムな文字を組み合わせて、パスワードを生成します。
パスワード用途では、randomではなくsecretsを使うのが基本です。
完成コード
password_generator.py を作ります。
import secrets
import string
def create_password(length):
characters = string.ascii_letters + string.digits
password = ""
for _ in range(length):
password += secrets.choice(characters)
return password
password = create_password(12)
print(password)
print(f"文字数: {len(password)}")
動作確認
python password_generator.py
12文字の英数字と 文字数: 12 が表示されれば成功です。
コードの考え方
string.ascii_lettersは英字ですstring.digitsは数字ですsecrets.choice()で安全寄りに1文字選びますforで指定回数だけ文字を追加します
文字列の結合や文字種の扱いは Pythonの文字列操作 で、ゲーム用の乱数は Pythonのrandom入門 で分けて学べます。
よくあるエラー
| エラー | 原因 | 修正 |
|---|---|---|
NameError | importを書いていない | import secrets を確認 |
| 文字数が違う | ループ回数が違う | range(length) を確認 |
| 記号がない | 英数字だけにしている | 必要なら string.punctuation を追加 |
練習
- 16文字のパスワードを作る
- 記号も含める
- 5個まとめて生成する
生成した値をソースコード、スクリーンショット、公開リポジトリへ保存しないでください。このコードは乱数生成の練習であり、Webサービスのパスワード保存機能を自作する例ではありません。秘密情報を公開しない基本は APIキー・パスワード・個人情報を漏らさない基本 と 秘密情報をGit管理から外す基本 で確認できます。
次のステップ
データ保存に進む場合は Pythonミニ制作:JSONファイルを読み書きする を読んでください。