簡単なCLIツール パスワード生成

【個人ブログ】開発過程と学習記録

投稿日

Pythonのsecretsを使ってパスワード生成ツールを作ってみました。randomしか使ったことしかなかったのですが、安全性を考慮するとsecretsが推奨されています。パスワードに含める文字タイプなども指定できます。

使用ライブラリ

from typing_extensions import Annotated
import typer
import secrets
import string

stringを使って文字タイプを指定できます。

パスワード生成関数

def create_pass(
        pass_len: Annotated[int, typer.Argument(help="作成したいパスワードの桁数を入力(6桁以上)", min=6)],
        upper: Annotated[bool, typer.Option("-u", help="大文字を含める")]=True,
        lower: Annotated[bool, typer.Option("-l", help="小文字を含める")]=True,
        num: Annotated[bool, typer.Option("-n" help="数字を含める")]=True,
        symbol: Annotated[bool, typer.Option("-s", help="記号を含める")]=True,
):
    chars = []    

    if upper:
       chars.append(string.ascii_uppercase)
    if lower:
       chars.append(string.ascii_lowercase)
    if num:
       chars.append(string.digits)
    if symbol:
       chars.append(string.punctuation)

    if not chars:
      print("最低一つの文字種は有効にしてください")
      raise typer.Exit(code=1)   

    req = "".join(chars)

    password = "".join(secrets.choice(req) for _ in range(pass_len))
    print(password)

ユーザーがパスワード数と、大文字・小文字・数字・記号のどれを含めるか指定できます。初期設定はTrueですべて含まれてます。今回はオプション引数が多いので短縮引数名をつけました。ちなみに–upperと-uどちらでも認識されます。
最初にユーザーの選択によって、charsにセットする文字タイプをif文で確認しています。
何も指定されなかった場合は、エラーで強制終了になっています。typer.Exit()のデフォルトは0で正常終了になります。secrets.choiceで指定した文字タイプからランダムに選ばれています。

最初に指定された文字タイプで配列をセットするところで悩みましたが、意外と単純な仕組みで作れました。制作期間は約3時間程。もっとさくっと作れるようになりたいですね。
CLIツールを3つ作ってきましたが、だいぶTyperの使い方にも慣れてきました。次はもう少しレベルの高いCLIツールを作りたいと思います。

最後まで読んでいただきありがとうございました!

コメント

タイトルとURLをコピーしました