功能說明
bcrypt 是刻意設計得很慢的密碼雜湊函式。MD5、SHA-256 每秒能算數十億次,而 bcrypt 有可調整的成本參數,讓偷走資料庫的攻擊者每猜一次都代價高昂。它和 Argon2、scrypt 一樣,至今仍是儲存密碼最常用的選擇之一。
本工具有兩個功能:
- 產生雜湊:依你選擇的成本和版本前綴,把密碼轉成 bcrypt 雜湊。
- 驗證:檢查密碼是否與既有的 bcrypt 雜湊相符,例如資料庫或框架種子檔中的雜湊。
使用方法
- 輸入密碼,或點選範例。
- 在產生雜湊模式下選擇成本和版本,雜湊立即產生;點選換一個鹽值可得到另一個。
- 在驗證模式下貼上要驗證的 bcrypt 雜湊,結果會顯示密碼是否相符。
看懂 bcrypt 雜湊
像 $2b$10$./3kakECWB0QfIgYzIqciuv449HNnwGbgExtJQQwQ1MofonthOdoK 這樣的雜湊由四部分組成:版本 2b、成本 10(2¹⁰ 輪金鑰設定)、22 個字元的鹽值和 31 個字元的檢查值。伺服器日後驗證密碼所需的一切都在這個字串裡,所以只需要儲存雜湊。
需要了解的限制
bcrypt 只讀取密碼的前 72 個位元組。更長的密碼,或含有許多非 ASCII 字元的密碼(UTF-8 中每個字元占 2–4 個位元組),會被默默截斷,發生時工具會提示。若要支援很長的通關語,可以先做一次預先雜湊,或考慮 Argon2id。
常見問題
› 為什麼同一個密碼每次產生的雜湊都不一樣?
每次雜湊都使用新的 16 位元組隨機鹽值,鹽值就存在雜湊字串裡。這是刻意設計,讓相同的密碼不會得到相同的雜湊。要驗證密碼,請用「驗證」模式,不要直接比較雜湊字串。
› 成本應該選多少?
選擇伺服器每次登入負擔得起的最高成本,目前一般是 10 到 12。每加 1 工作量加倍。請在正式環境的硬體上實測,單次雜湊約 100–300 毫秒是常見目標。
› $2a$、$2b$ 和 $2y$ 有什麼差別?
演算法相同。$2b$ 是 OpenBSD 目前的前綴,$2y$ 是 PHP password_hash 寫出的前綴,$2a$ 是較舊的版本。多數函式庫三種都接受,選你的系統需要的即可。
› 我的密碼會被傳送出去嗎?
不會。雜湊和驗證都在瀏覽器中完成。密碼和要驗證的雜湊只存在目前頁面的記憶體裡,不會儲存,也不會加入分享連結。