BCrypt 雜湊比對工具|免費快速驗證密碼與雜湊是否匹配

輸入密碼與 BCrypt 雜湊值,幾秒內即可免費驗證是否匹配。執行方式與 PHP 的 password_verify() 相同,適合除錯登入問題,自動支援 $2a$ 與 $2b$ 格式。

雜湊值
文本

匹配

不匹配

BCrypt 比對是什麼

這是用來驗證所輸入的明文密碼,與既有的 BCrypt 雜湊值是否由相同的原始字串所產生的工具。由於運作機制與 PHP 的 password_verify() 函式相同,可用於登入處理的實作確認與除錯。

BCrypt 雜湊值內含鹽值,因此即使由相同密碼產生,每次也會是不同的字串。單純的字串比較無法進行比對,必須以專用演算法取出鹽值後再行比較,而本工具便代為執行此項處理。

BCrypt 比對的使用方法

  1. 輸入字串 在輸入欄輸入想比對的明文密碼。
  2. 輸入雜湊值 貼上以 $2a$ 或 $2b$ 開頭的 BCrypt 雜湊值。
  3. 按下驗證按鈕 一致或不一致的結果會即時顯示。

用好本工具的小技巧

  • BCrypt 將鹽值內嵌於雜湊中,因此即使每次雜湊結果不同,只要來自同一原始字串,也會被判定為匹配
  • 本工具的驗證機制與 PHP 的 password_verify($password, $hash) 相同。
  • 將從資料庫獲取的雜湊值與輸入密碼進行比對時,請使用專用驗證函式而非普通字串比較(==),以防止時序攻擊。
  • $2a$ 開頭的雜湊值同樣可作為 BCrypt 進行驗證。

BCrypt 比對的實用場景

登入處理的除錯

可不經應用程式的程式碼,直接確認資料庫中保存的雜湊值是否與預期的密碼一致。

密碼重設後的行為確認

可測試以新密碼產生的雜湊值,是否與預期的明文一致。

遷移時的雜湊值驗證

可事先確認自其他系統遷移而來的 BCrypt 雜湊值能否正確運作。

與 BCrypt 相關的術語

鹽值(salt)
產生雜湊值時附加的隨機字串。支撐著即使是相同密碼每次也會產生不同雜湊值的機制。
password_verify()
PHP 的標準函式,用於安全地比較明文密碼與雜湊值。內部會自動處理鹽值的取出。
計時攻擊
由處理時間的細微差異推測機密資訊的攻擊手法。使用進行常數時間比較的專用函式即可防範。
$2a$ / $2b$
表示 BCrypt 雜湊值版本的前綴。$2b$ 是修正了舊實作缺陷的版本,為目前所建議使用。

常見問題

BCrypt 將隨機鹽值嵌入雜湊值中。驗證時,從雜湊值中提取鹽值,再用相同的鹽對輸入進行雜湊比較,因此即使雜湊值每次不同,也能正確匹配。

兩者相容,本工具均可驗證。$2b$ 是修復了舊版實現中某個錯誤的版本,目前推薦使用 $2b$

不能。BCrypt 是單向雜湊函式,從雜湊值反推原始密碼在計算上是不可行的。本工具僅驗證是否匹配,無法還原原始值。
工具君

閒話 ― 認證的幕後:登入時那"零點幾秒"的真相

在網路服務中,按下登入按鈕到收到結果之間的零點幾秒,部分時間正是 BCrypt 在計算密碼雜湊值。這個延遲是為了安全而"故意"設計的。

時序攻擊(Timing Attack)是一種旁通道攻擊,通過測量處理時間的細微差異來推斷秘密資訊。用普通字串比較(==)驗證密碼時,比較時間會因字元匹配位置不同而略有差異。BCrypt 的驗證函式設計為以恆定時間執行,因此能有效抵禦此類攻擊。

在實際 Web 應用中,建議即使使用者不存在,也以與"使用者存在但密碼錯誤"相同的時間返回響應。若攻擊者能區分"使用者不存在"與"密碼錯誤",就會獲得列舉有效使用者名稱的線索。