Skip to content

什么是“盐”?

  • 定义:盐(Salt)是一段随机生成的数据,用于与密码一起进行哈希计算。
  • 目的:确保即使用户的密码相同,存储在数据库中的哈希值也不同,从而防止彩虹表攻击和暴力破解。 image

为什么需要“盐”?

  • 无盐风险:没有使用盐的情况下,多个用户的相同密码会生成相同的哈希值,攻击者可以利用彩虹表快速破解密码。
  • 盐的作用:加入盐后,即使密码相同,生成的哈希值也会不同,提高了安全性。

如何生成和使用“盐”?

  1. 生成随机盐
    • 使用加密安全的伪随机数生成器(如 SecureRandom)。
    • 盐值长度至少为16字节。
  2. 将盐与密码结合
    • 将盐值加在密码的前面或后面。
  3. 对盐化后的密码进行哈希处理
    • 使用合适的哈希算法(如 bcrypt、Argon2、scrypt)。
  4. 将盐与哈希值一起存储
    • 将盐值与哈希值一起存储在数据库中,盐值可以公开存储。

如何验证密码?

  • 提取存储的盐值和哈希值
  • 使用同样的盐值与用户输入的密码进行拼接
  • 重新哈希组合后的密码,并与存储的哈希值进行比对

其他保证密码安全的措施

  1. 定期更新密码存储方案
    • 随着时间的推移,密码哈希算法的强度可能变弱,需要更新。
  2. 保护数据库和系统本身
    • 严格控制数据库访问权限,定期检查和修复系统漏洞。
  3. 启用双因素认证(2FA)
    • 即使密码被泄露,也能大幅提高安全性。

君子慎独