Bcrypt 密碼 產生器
在瀏覽器中即時產生安全的bcrypt密碼雜湊值。選擇成本因子,客戶端雜湊 — 完全私密且免費。
在瀏覽器中即時產生安全的bcrypt密碼雜湊值。選擇成本因子,客戶端雜湊 — 完全私密且免費。
bcrypt 是由 Niels Provos 和 David Mazières 於 1999 年設計的密碼雜湊函數,源自 Blowfish 密碼。與 SHA-256 等通用雜湊函數不同,bcrypt 故意緩慢(並且可以透過成本參數配置緩慢),這正是密碼雜湊器所需的屬性。更快的雜湊函數可以讓攻擊者每秒暴力破解更多候選者;較慢的速度會限制它們。
bcrypt 也自動合併每個密碼的鹽,消除基於預先計算的彩虹表的一整類攻擊。 salt 和 cost 參數作為 bcrypt 輸出的一部分存儲,因此驗證只需要存儲的哈希值和候選密碼 - 無需單獨的 salt 管理。這種緩慢、鹽分和獨立格式的結合使得 bcrypt 成為二十年來的預設密碼哈希,並且成為今天的一個強有力的選擇。
現代替代方案是存在的。 Argon2 贏得了 2015 年密碼哈希競賽,除了時間硬度之外,還提供記憶體硬度。 scrypt 提供類似的屬性。對於新設計,建議選擇 Argon2id。 bcrypt 仍然可以接受並廣泛部署,特別是在 Argon2 不可用的環境中。
將密碼儲存為明文是一種不當行為。使用像 SHA-256 這樣的快速雜湊值來儲存它們也好不了多少——現代 GPU 每秒計算數十億次 SHA-256 雜湊值,使得對任何常見密碼的暴力攻擊在數小時內變得可行。 bcrypt 故意緩慢的速度改變了經濟性:在成本係數 12 下,攻擊者為每個候選密碼花費大約 250 毫秒,這使得暴力破解對於任何重要的密碼都是不切實際的。
bcrypt 的自動每個密碼鹽也能抵禦彩虹表攻擊。兩個具有相同密碼的使用者會產生不同的 bcrypt 雜湊值,因為他們的鹽不同。破壞密碼資料庫不會讓攻擊者快速辨識常見密碼或預先計算表的命中。
輸入密碼,選擇成本,取得雜湊值。
bcrypt 使用修改後的 Blowfish 密碼的金鑰設定階段,重複 2^cost 次。成本因素是對數的 — 成本 12 是成本 11 的兩倍,是成本 10 的四倍。這種對數縮放使管理員可以隨著硬體的改進而逐漸提高成本,而無需重新設計系統。
輸出格式為 $version$cost$saltAndHash,其中 saltAndHash 使用自訂字母表進行 Base64 編碼。該版本通常是 $2b$ (修復了環繞錯誤的現代變體)或 $2y$ (特定於 PHP 的等效版本)。鹽為16位元組;雜湊值是 24 個位元組;它們一起編碼為 53 個字元的 custom-base64。
最大輸入長度為 72 位元組(Blowfish 金鑰長度限制)。較長的密碼會被悄悄截斷,這是 bcrypt 的一個長期存在的怪癖。最佳實踐是將密碼長度限制為 72 個字節,或使用 SHA-256 進行預哈希,以在 bcrypt 之前標準化長度。