萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 網路安全 >  >> 網路應用技術

為什麼必須用 bcrypt 存儲密碼:拒絕 MD5/SHA 系列通用哈希

核心建議:用 bcrypt、用 bcrypt、用 bcrypt……(重要的話說三遍)

為什麼不能用 MD5、SHA-1、SHA-256、SHA-512、SHA-3?

這些都是通用哈希函數,設計初衷是極速計算海量數據摘要,以保證數據完整性。但對「存儲密碼」而言,速度快是致命缺陷。

暴力破解有多快?

  • 現代服務器計算 MD5 约 330 MB/s。若密碼僅含小寫字母數字、長度 6 位,40 秒即可窮舉破解,零成本。
  • 投入 2000 美元購買 CUDA 顯卡,一兩周搭建小型集群,算力達 7 億次/秒,以每秒 10% 速度破解此類密碼。

加鹽(Salt)救不了你

極其重要:鹽值對字典攻擊和暴力破解無效。無論你用粗鹽、大量鹽、甚至「有機喜馬拉雅粉晶鹽」,只要底層是為速度設計的通用哈希,攻擊者破解速度不變。鹽值只能防彩虹表預計算,無法提高單次驗證成本。

bcrypt 如何解決問題?

核心機制:慢到令人發指。源自 Blowfish 加密算法,引入功因子,可人為調節計算強度,緊跟摩爾定律——硬體越快,功因子越大,哈希越難算。

強度對比(功因子 12)

  • bcrypt 哈希「yaaa」約需 0.3 秒。
  • MD5 處理同樣輸入 < 1 微秒。
  • 差距超過 30 萬倍。

你可根據業務在「速度」與「安全」間平衡:調高功因子提升安全,調低加快驗證。

最佳實踐建議

  1. 所有新系統統一採用 bcrypt(或 Argon2、PBKDF2、scrypt 等慢哈希)。
  2. 舊系統遷移:在用戶下次登錄時,用 bcrypt 重新哈希並覆蓋舊值。
  3. 功因子建議 ≥ 12(2024 年基準),隨硬體升級定期調高。
  4. 切勿自行設計加密方案,使用成熟庫(如 Python `bcrypt`、Node `bcryptjs`、Java `BCrypt`、Go `golang.org/x/crypto/bcrypt`)。

總結:密碼存儲唯一正確選擇是專為「慢」而設計的自適應哈希函數。bcrypt 經過二十年實戰考驗,仍是黃金標準之一。

copyright © 萬盛學電腦網 all rights reserved