Python - パスワードを生成する

パスワードなどは暗号学的に安全な乱数列を自動生成するというのが良いと思っている。
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に対応しています。


See also