目次
(確認環境:Python 3、Windows10)
bcryptとは
- 「ハッシュ化」するアルゴリズムです。
- bcryptは一方向関数なので、ハッシュから元のパスワードを復元することはできません。
- ソルト(salt)を自動的に生成して付与し、ストレッチング(計算を意図的に重くする)ことで総当たり攻撃(ブルートフォース攻撃)に強い特徴があります。
運用上の流れ
1.ユーザー登録時
入力されたパスワードをbcryptでハッシュ化してDBに保存する。
元のパスワードは保存しない。
2.ログイン認証時
ユーザー入力のパスワードをbcryptで同じ処理に通し、DBに保存してあるハッシュと比較する。
一致すれば認証成功。
bcryptでパスワードをハッシュ化する
import bcrypt
# パスワードをバイト列に変換
password = b"ABCD"
# ソルトを生成し、bcryptでハッシュ化
hashed = bcrypt.hashpw(password, bcrypt.gensalt())
print(hashed) # b'$2b$12$O.PqoHzeQkecYnz1qHXwg.GiM2qZ9nDSWHi4TLK9krG5O.USKvVuW'
# ログイン時の検証
if bcrypt.checkpw(b"ABCD", hashed):
print("OK") # OK
else:
print("NG")
7行目は、ソルトを生成し、bcryptでハッシュ化しています。
12行目は、元の文字列とハッシュ化した文字列を比較しています。結果はtrueになります。
(イメージ:ユーザが入力したパスワード値とテーブルに保存された値を比較し同じならログインを許可)
bcryptモジュールがない場合、bcryptモジュールをインストールする
bcryptモジュールがない場合、以下のメッセージが出ます。
ModuleNotFoundError: No module named 'bcrypt'
その場合は、bcryptモジュールをインストールします。
pip3 install bcrypt
Collecting bcrypt
Downloading bcrypt-4.3.0-cp39-abi3-win_amd64.whl.metadata (10 kB)
以下省略
インストール後の確認です。バージョン情報がでればOKです。
python -m pip show bcrypt
Name: bcrypt
Version: 4.3.0
Summary: Modern password hashing for your software and your servers
以下省略
関連の記事