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

密码存储的注意事项
以明文存储密码并不是一个好主意,因为任何具有内部访问权限的人都可以看到它们。
直接存储密码哈希远远不够,因为它容易受到预计算攻击(如彩虹表攻击)。
为了减少预计算攻击,我们对密码进行加盐处理。
什么是盐?
根据OWASP(开放网络应用安全项目)指南,“盐值是一个唯一的、随机生成的字符串,在哈希处理过程中被添加到每个密码中”。
如何存储密码和盐?
- 通过加盐,每个密码的哈希结果都是唯一的。
- 可以使用以下格式将密码存储在数据库中:hash(password + salt)。
如何验证密码?
验证密码可以经过以下过程:
- 客户端输入密码。
- 系统从数据库中获取相应的盐。
- 系统将盐附加到密码上并进行hash处理。我们称hash值为H1。
- 系统将H1与存储在数据库中的hash值H2进行比较。如果它们相同,则密码有效。