防禦「撞庫」(撞擊已泄露的用戶名/密碼對)與「彩虹表」(預計算常見密碼哈希)。
| 方案 | 安全性 | 備註 |
|---|---|---|
| 明文 | ❌ | 極度危險 |
| 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);