在現代網站開發中,為了保護使用者的密碼,最常見的做法就是將密碼「雜湊」後再儲存於資料庫。bcrypt 是一種安全性極高的密碼雜湊演算法,即使相同密碼,每次產生的 hash 結果也都不一樣。這篇文章會教你如何用 Python 驗證明文密碼是否和某個 bcrypt hash 相符。
一、安裝 bcrypt 套件
首先必須先安裝 bcrypt
這個套件。
打開終端機,輸入:
pip install bcrypt
如果你是用 Jupyter Notebook,可以加上驚嘆號:
!pip install bcrypt
二、準備 bcrypt 雜湊字串
假設你的資料庫中有一組 bcrypt hash(雜湊後的密碼),像這樣:
$2b$10$z9FZiGfQfmsnFvgJ4ymu0.AvQEBI351v3dZ1cywgn/ngGAx7gwuHa
三、撰寫驗證程式
以下提供一個完整的 Python 範例,教你如何判斷明文密碼(例如:1
)是否和上面這組 bcrypt hash 相符:
import bcrypt
# bcrypt 雜湊字串,注意前面要加 b 變成 bytes
hash = b"$2b$10$z9FZiGfQfmsnFvgJ4ymu0.AvQEBI351v3dZ1cywgn/ngGAx7gwuHa"
# 明文密碼,同樣要轉成 bytes
password = b"1"
# 驗證密碼
if bcrypt.checkpw(password, hash):
print("密碼正確")
else:
print("密碼錯誤")
四、執行結果
- 如果密碼正確,會印出
密碼正確
- 如果密碼不正確,會印出
密碼錯誤
五、常見問題整理
NameError: name 'bcrypt' is not defined
- 解決方法:確定你已經
import bcrypt
,且有正確安裝 bcrypt 套件。
TypeError: Unicode-objects must be encoded before checking
六、結語
使用 bcrypt 來驗證密碼,是現代資訊安全的基本功。只要善用現成套件,就能讓密碼保護更上一層樓。
這個範例也可以用在登入、會員系統等各種場景,簡單又安全。