BCrypt 雜湊比對工具|免費快速驗證密碼與雜湊是否匹配
輸入密碼與 BCrypt 雜湊值,幾秒內即可免費驗證是否匹配。執行方式與 PHP 的 password_verify() 相同,適合除錯登入問題,自動支援 $2a$ 與 $2b$ 格式。
| 雜湊值 | |
|---|---|
| 文本 |
匹配
不匹配
Tips
- BCrypt 將鹽值內嵌於雜湊中,因此即使每次雜湊結果不同,只要來自同一原始字串,也會被判定為匹配。
- 本工具的驗證機制與 PHP 的
password_verify($password, $hash)相同。 - 將從資料庫獲取的雜湊值與輸入密碼進行比對時,請使用專用驗證函式而非普通字串比較(
==),以防止時序攻擊。 - 以
$2a$開頭的雜湊值同樣可作為 BCrypt 進行驗證。
常見問題
BCrypt 將隨機鹽值嵌入雜湊值中。驗證時,從雜湊值中提取鹽值,再用相同的鹽對輸入進行雜湊比較,因此即使雜湊值每次不同,也能正確匹配。
兩者相容,本工具均可驗證。
$2b$ 是修復了舊版實現中某個錯誤的版本,目前推薦使用 $2b$。不能。BCrypt 是單向雜湊函式,從雜湊值反推原始密碼在計算上是不可行的。本工具僅驗證是否匹配,無法還原原始值。
閒話 ― 認證的幕後:登入時那"零點幾秒"的真相
在網路服務中,按下登入按鈕到收到結果之間的零點幾秒,部分時間正是 BCrypt 在計算密碼雜湊值。這個延遲是為了安全而"故意"設計的。
時序攻擊(Timing Attack)是一種旁通道攻擊,通過測量處理時間的細微差異來推斷秘密資訊。用普通字串比較(==)驗證密碼時,比較時間會因字元匹配位置不同而略有差異。BCrypt 的驗證函式設計為以恆定時間執行,因此能有效抵禦此類攻擊。
在實際 Web 應用中,建議即使使用者不存在,也以與"使用者存在但密碼錯誤"相同的時間返回響應。若攻擊者能區分"使用者不存在"與"密碼錯誤",就會獲得列舉有效使用者名稱的線索。