首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 登錄加密:MD5、SHA、加鹽與現代最佳實踐

     編輯:程式設計綜合問答

威脅模型

防禦「撞庫」(撞擊已泄露的用戶名/密碼對)與「彩虹表」(預計算常見密碼哈希)。

演進路線

方案安全性備註
明文❌極度危險
MD5/SHA1 直連⚠️速度快,易暴力破解,彩虹表覆蓋率高
MD5(MD5(pass))⚠️雙重哈希,僅增加微小計算量
MD5(salt + pass)✅ 基線每用戶唯一隨機鹽,擊敗彩虹表
PBKDF2 / bcrypt / scrypt / Argon2✅✅✅ 推薦可配置計算成本(迭代次數/內存/並行度),專為密碼設計

代碼示例

// Spring Security BCrypt (生產環境首選)
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(12); // strength 12
String hash = encoder.encode(rawPassword);
boolean matches = encoder.matches(rawPassword, hash);

關鍵原則

  1. 唯一鹽:每用戶生成 16+ 字節隨機鹽,存入數據庫與哈希值同行。
  2. 慢哈希:使用可調成本的 KDF,使驗證耗時 ~100-300ms,大幅降低 GPU 破解速度。
  3. 傳輸加密:全站 HTTPS,防止中間人竊取明文/哈希。
  4. 不限制密碼長度/字符集:允許長密語,僅做合理長度上限(如 128 字符)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved