Python bcryptでパスワードをハッシュ化するサンプル

目次

(確認環境: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
以下省略

 

関連の記事

Python 文字列をつなげるサンプル(結合)

△上に戻る