使用bcrypt演算法產生安全的密碼雜湊
工具功能
- 安全雜湊:使用具有自適應成本因子的bcrypt演算法: 使用具有自適應成本因子的bcrypt演算法進行安全密碼雜湊
- 雙模式:支援密碼雜湊和驗證兩種模式: 支援密碼雜湊和驗證兩種模式
- 可設定輪數:成本因子可從4調整到31: 成本因子可從4調整到31輪
- 鹽值產生:為每個雜湊自動產生鹽值: 為每個雜湊操作自動產生鹽值
使用方法
- 輸入密碼: 輸入您要雜湊或驗證的密碼
- 設定參數: 選擇操作模式並調整輪數
- 產生或驗證: 產生雜湊或驗證密碼並複製結果
生成原理
什麼是 Bcrypt 密碼雜湊
Bcrypt 是由 Niels Provos 和 David Mazières 設計的密碼雜湊函數,基於 Blowfish 密碼演算法。專門為密碼儲存而設計,透過可設定的工作因子提供自適應安全性。Bcrypt 整合了自動鹽值生成以防止彩虹表攻擊,並使用計算成本昂貴的過程使暴力破解攻擊變得不切實際。被廣泛認為是現代應用程式中密碼雜湊的黃金標準。
自適應成本因子與安全性
Bcrypt 的自適應成本因子允許開發人員根據硬體能力和安全需求調整計算複雜性。工作因子(輪數)可以隨著硬體變快而增加,保持對暴力破解攻擊的安全性。典型值在生產環境中為10-12輪,高安全應用程式使用更高值(14-16)。計算時間的指數增長使得即使使用現代硬體也無法破解密碼。
鹽值生成與雜湊過程
Bcrypt 為每個密碼自動生成唯一的隨機鹽值,防止彩虹表攻擊並確保相同密碼產生不同的雜湊。該過程將密碼與鹽值結合,然後應用多輪 Blowfish 加密演算法。生成的雜湊包括鹽值和成本因子,使其自包含且可驗證。這種設計確保即使雜湊資料庫被洩露,單個密碼仍然受到保護。
常見問題
- 什麼是 Bcrypt,為什麼要使用它?
- Bcrypt 是專門為安全密碼儲存設計的密碼雜湊函數。與 MD5 或 SHA-1 等通用雜湊函數不同,bcrypt 故意設計得緩慢且計算成本高,使暴力破解攻擊變得不切實際。它為每個密碼自動生成隨機鹽值,並允許隨著時間推移增加成本因子以維護安全性。
- 輪數是什麼意思?
- 輪數(或成本因子)決定雜湊過程運行的迭代次數。每增加一輪,計算時間翻倍。10 輪大約需要 100ms,而 12 輪大約需要 400ms。生產環境建議使用 10-12 輪,高安全系統可能使用 14-16 輪。避免使用少於 8 輪。
- 為什麼相同的密碼每次生成不同的雜湊?
- Bcrypt 為每個雜湊自動生成隨機鹽值。這是核心安全特性 - 即使相同的密碼也會因為不同的鹽值而產生不同的雜湊。這可以防止彩虹表攻擊,並確保攻擊者無法使用預計算的雜湊列表。鹽值包含在雜湊本身中,因此可以在驗證期間提取。
- Bcrypt 雜湊可以反向恢復嗎?
- 不可以,bcrypt 是單向雜湊函數。沒有數學方法可以從雜湊中恢復原始密碼。這正是它對密碼儲存安全的原因。要驗證密碼,您需要再次雜湊相同的密碼(使用儲存的鹽值),並將結果與儲存的雜湊進行比較。如果雜湊匹配,則密碼正確。
- 在生產環境中使用 Bcrypt 安全嗎?
- 是的,Bcrypt 是生產使用的行業標準。所有主要程式語言都使用它,包括 節點.js (bcrypt.js)、Python (bcrypt)、PHP (password_hash) 和 Java (jBCrypt)。OWASP、NIST 和安全專家都推薦用於密碼儲存。只需確保使用適當的輪數(10-12),安全地儲存雜湊,並透過 HTTPS 傳輸密碼。
相關文件
- Wikipedia - Bcrypt 密碼雜湊演算法 - 全面概述 bcrypt 密碼雜湊函數及其設計原理
- OWASP 密碼儲存備忘單 - 安全密碼儲存和雜湊的業界最佳實踐和指南
- jBCrypt - Bcrypt 的 Java 實作 - 實作 bcrypt 密碼雜湊演算法的開源 Java 程式庫
- Blowfish 密碼規範 - bcrypt 所基於的 Blowfish 加密演算法技術規範
- NIST 密碼指南 SP 800-63B - NIST 數位身分指南官方文件,包含密碼雜湊建議