什么是“盐”?
- 定义:盐(Salt)是一段随机生成的数据,用于与密码一起进行哈希计算。
- 目的:确保即使用户的密码相同,存储在数据库中的哈希值也不同,从而防止彩虹表攻击和暴力破解。
为什么需要“盐”?
- 无盐风险:没有使用盐的情况下,多个用户的相同密码会生成相同的哈希值,攻击者可以利用彩虹表快速破解密码。
- 盐的作用:加入盐后,即使密码相同,生成的哈希值也会不同,提高了安全性。
如何生成和使用“盐”?
- 生成随机盐:
- 使用加密安全的伪随机数生成器(如 SecureRandom)。
- 盐值长度至少为16字节。
- 将盐与密码结合:
- 将盐值加在密码的前面或后面。
- 对盐化后的密码进行哈希处理:
- 使用合适的哈希算法(如 bcrypt、Argon2、scrypt)。
- 将盐与哈希值一起存储:
- 将盐值与哈希值一起存储在数据库中,盐值可以公开存储。
如何验证密码?
- 提取存储的盐值和哈希值。
- 使用同样的盐值与用户输入的密码进行拼接。
- 重新哈希组合后的密码,并与存储的哈希值进行比对。
其他保证密码安全的措施
- 定期更新密码存储方案:
- 随着时间的推移,密码哈希算法的强度可能变弱,需要更新。
- 保护数据库和系统本身:
- 严格控制数据库访问权限,定期检查和修复系统漏洞。
- 启用双因素认证(2FA):
- 即使密码被泄露,也能大幅提高安全性。