Pythonでランダムパスワードを発行してクリップボードにコピー

PPAP(Passwordロックしたファイルを送り、続けてPasswordを送るAngoka(暗号化)Protocol(プロトコル))の文化が未だになくならないケースがあります。大手企業はオンラインストレージサービスを企業単位で契約して従業員に必然的に使用するしかない環境を構築し、PPAPも技術的に禁止することで撲滅できますが、中小企業やICTリテラシーがそれほど高くない企業にとってはなかなか一律で導入とはいきません。

メール添付以外でも、業務の都合でどうしてもランダムに発行されたパスワードが必要になることがあります。その度にパスワード文字列を考えるのが面倒だったのでpythonで自動化してみました。

英大文字、英小文字、数字、記号を組み合わせた12桁のランダムパスワードを発行します。

本当にランダムに発行してしまうと、文字列の中に数字だけ入っていなかったり、記号が入っていなかったり、結果的に複雑さを満たすパスワードが生成されないことがあるため、ひと工夫が必要です。コードサンプルが以下です。

動作環境:Windows10 64bit, Python3.10.4

import random
import string
import pyperclip
def get_random_password():
    random_source = string.ascii_letters + string.digits
    password = random.choice(string.ascii_lowercase)
    password += random.choice(string.ascii_uppercase)
    password += random.choice(string.digits)
    password += random.choice(string.punctuation)
    for i in range(8):
        password += random.choice(random_source)
    password_list = list(password)
    random.SystemRandom().shuffle(password_list)
    password = ”.join(password_list)
    return password
print(“Random Password is “, get_random_password())
pyperclip.copy(get_random_password())
最初に英小文字と数字で8文字作成し、続けて英小文字1文字、英大文字1文字、数字1文字、記号1文字の合計12文字を作成します。更に生成された文字列の順序をランダム配置することで、例外なく複雑さを満たすパスワードが発行されます。
更に、サンプルコード上ではpyperclipライブラリを使用してWindowsのクリップボードに発行した文字列が入りますので、実際に文字列を使用するときは「Ctrl」+「v」で一発で貼り付けられます。