为什么不能只用 SHA
SHA 速度快,攻击者可以用彩虹表或字典对海量密码瞬间反查。给密码加同一个盐只能挡彩虹表,挡不住针对单个哈希的暴力破解。
正确做法
- 每个用户独立加盐:盐随机生成、随哈希一起存,不必保密但必须唯一;
- 用慢哈希算法:bcrypt / scrypt / Argon2 故意算得慢、可调成本,拖慢暴力破解;
- 提高工作因子:随着硬件变快逐步调高,但别高到影响登录体验。
泄露之后
- 强制重置:通知用户改密码,而不是「建议」;
- 加额外验证:可疑登录要求第二步验证;
- 别明文发密码:「忘记密码」应发一次性重置链接,而不是把原密码发回来(说明你存了明文)。