Skip to content

如何在数据库中安全存储密码以及如何验证密码?

密码存储的注意事项

  • 以明文存储密码并不是一个好主意,因为任何具有内部访问权限的人都可以看到它们。

  • 直接存储密码哈希远远不够,因为它容易受到预计算攻击(如彩虹表攻击)。

  • 为了减少预计算攻击,我们对密码进行加盐处理。

什么是盐?

根据OWASP(开放网络应用安全项目)指南,“盐值是一个唯一的、随机生成的字符串,在哈希处理过程中被添加到每个密码中”。

如何存储密码和盐?

  1. 通过加盐,每个密码的哈希结果都是唯一的。
  2. 可以使用以下格式将密码存储在数据库中:hash(password + salt)。

如何验证密码?

验证密码可以经过以下过程:

  1. 客户端输入密码。
  2. 系统从数据库中获取相应的盐。
  3. 系统将盐附加到密码上并进行hash处理。我们称hash值为H1。
  4. 系统将H1与存储在数据库中的hash值H2进行比较。如果它们相同,则密码有效。