實用工具
輸入
結果
結果會顯示在這裡。Laravel、Spring Security、Rails 的 has_secure_password 預設都用 bcrypt 儲存密碼,所以遲早會遇到兩件事:替種子使用者手動產生一個雜湊,或者追查某個帳號為什麼一直登入失敗。這個工具兩件都能做——依選定的成本因子替密碼產生雜湊,或者貼上資料庫裡存的雜湊,看某個密碼能不能對得上。底層是 bcrypt.js(dcodeIO/bcrypt.js,3.8k star,BSD-3-Clause),一個零相依的純 JavaScript 實作,產生的雜湊與 PHP password_hash、Python bcrypt、Go x/crypto/bcrypt 完全通用。請注意 bcrypt 是雜湊而不是加密,沒有「解密」這回事,只能驗證。
它是怎麼運作的
- 每次產生都用 crypto.getRandomValues 取一個新的 128 位元鹽值,所以同一個密碼算兩次會得到兩個不同的 60 字元雜湊,而兩者都能通過驗證。
- 成本因子是金鑰擴展輪數以 2 為底的對數:cost 10 即 1,024 輪,每加 1 耗時翻倍;結果中顯示的耗時是在你這台裝置上實測的。
- 驗證時使用儲存的雜湊中自帶的鹽值與成本重新計算,再做常數時間比較,與伺服器端登入驗證的邏輯完全一致。
- bcrypt 只讀取密碼的前 72 個位元組,超出的部分會被標示出來;貼上時帶進來的結尾換行會被移除,空格則保留。
你的資料去了哪裡
哪也沒去。本工具完全在你的瀏覽器裡執行:你貼上的文字由頁面處理,不會傳輸到任何伺服器,也不會寫進任何紀錄。
本工具會接觸金鑰與憑證,因此任何一次執行都不會被儲存,連你自己的歷史裡也不會有。
它要花多少
本工具完全免費,不需要登入,也不消耗點數。
常見問題
- 成本因子設多少比較合適?
- OWASP 密碼儲存備忘單要求至少 10。實務上是選你的登入伺服器能負擔的最高值——在那台機器上實測每次雜湊約 100–250 毫秒,而不是以這裡的耗時為準。cost 12 的耗時是 cost 10 的 4 倍,15 則是 32 倍;達到 13 以上時工具會提醒你,因為每一次登入和攻擊者的每一次猜測都要付出這個代價。
- $2a$、$2b$、$2y$ 有什麼差別?
- 演算法完全相同,只是修正歷史 bug 後標上的不同標籤。$2y$ 是 PHP 的 crypt_blowfish 在 2011 年修正非 ASCII 位元組的符號擴展漏洞後引入的;$2b$ 是 OpenBSD 在 2014 年修正密碼長度在 256 位元組處溢位歸零的問題後引入的。只要密碼短於 72 位元組,三者除了前綴之外結果一模一樣,主流函式庫也都能驗證這三種前綴。
- 為什麼很長的密碼改了結尾還是能通過驗證?
- 因為所有 bcrypt 實作都看不到第 72 個位元組之後的內容。72 位元組等於 72 個英文字元,但在 UTF-8 下只有 24 個中文字,中文密碼片語很容易超過上限。如果一定要支援更長的密碼,有些系統會先做 SHA-256 再以 Base64 編碼後交給 bcrypt——千萬別直接傳入原始的二進位摘要,其中的零位元組在許多實作中會截斷密碼。
- 2026 年了,bcrypt 還能用嗎?
- 還能用,而且遠比 MD5、SHA-256 這類快速雜湊好。但 OWASP 現在把 Argon2id 列為第一、scrypt 第二,因為 bcrypt 記憶體用量小,用 GPU 和專用硬體破解的成本相對較低。已經在用 bcrypt 的系統,常見做法是逐步調高成本因子,並在使用者下次登入時重新雜湊。
- 密碼和雜湊會被上傳嗎?
- 不會。產生和驗證都在目前頁面的 JavaScript 中完成,沒有任何網路請求,網站也不記錄這次執行——即使你已登入,歷史紀錄裡也不會出現。
背後的開源專案
本工具執行在 dcodeIO/bcrypt.js 之上,以 BSD-3-Clause 授權發布。如果你需要在自己的程式裡實作同樣的能力,直接用這個函式庫。
dcodeIO/bcrypt.js也常被稱作
- bcrypt 線上產生
- bcrypt 雜湊產生器
- bcrypt 驗證
- bcrypt 解密
- password_hash 線上
- bcrypt cost