パスワードなどは暗号学的に安全な乱数列を自動生成するというのが良いと思っている。
Pythonには、OSの乱数発生機を利用するos.urandom
というのとbase64
が標準モジュールとして備わっているので、
これらを使って乱数列を作っていました。
import os
import base64
password = base64.urlsafe_b64encode(os.urandom(64))
または、適当なソルトを追加してハッシュ値を取ったりして
import os
import base64
import hashlib
seed = os.urandom(64) + b'dekirukigasuru.com'
password = base64.urlsafe_b64encode(hashlib.sha512(seed).digest())
みたいな。
secretsモジュール
ところで、Python3.6でsecrets
なるモジュールが追加されています。
import secrets
token = secrets.token_urlsafe(32)
実装を見てみると、os.urandom()
してbase64.urlsafe_b64encode()
するということで
同じことしていましたので、これを使っていけば良いのかな。
ちなみにhashlibもPython3.6からsha3に対応しています。