🗒️

PasslibとHashlib メモ

に公開

■hashlib は「ハッシュ関数ライブラリ」
■passlib は「安全なパスワードハッシュのベストプラクティスをまとめたラッパー」

Passlibを使うと、自動でソルトの付与からストレッチングまでを行ってくれる。
CryptContextでハッシュ化アルゴリズムの種類、ソルト、ストレッチング回数などの設定が行える。

from passlib.context import CryptContext

pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

hashed_old = pwd_context.hash("password123")  # 古いハッシュを想定

# パスワード検証+必要なら再ハッシュ
verified, new_hash = pwd_context.verify_and_update("password123", hashed_old)

print(verified)  # True: パスワードは正しい
print(new_hash)  # None または新しいハッシュ文字列

deprecated="auto"は古い暗号化方式を検出する。
verified, new_hash = pwd_context.verify_and_update("password123", hashed_old)
verify_and_update認証の際に古い方法使ってたら新しい暗号方式で再暗号化しハッシュ値を出してくれる。
上記コードでは再暗号化したハッシュ値はnew_hashに入るので、
この値がnullでない場合にはDBのハッシュにupdateかけるとかするといいかも。

参考元

Passlib
https://omomuki-tech.com/archives/1361

Hashlib
https://omomuki-tech.com/archives/1422

理解の手助け
https://zenn.dev/shromesh/articles/7e198ec31c0425

Passlib公式
https://passlib.readthedocs.io/en/stable/narr/context-tutorial.html

Discussion