我看过一些关于这个主题的其他话题,但我似乎无法找到一些涉及在密码加密中使用随机盐的问题的答案。据我了解,这些步骤是这样的:
- 为用户生成随机盐。
- 将盐附加到他们的密码。
- 使用 SHA-2 之类的算法对结果进行哈希处理。
- 将加盐密码和散列密码都存储在数据库中。
此方法在检索用户密码和验证登录时如何工作?一种回应说应该检索用户的盐,附加到他们输入的密码,散列,然后与存储的散列进行比较,但这不会引发一些问题吗?即:
- 如何在不危及该用户的情况下取回盐?如果有人想暴力破解某个帐户的密码,他们是否无法检索从服务器发回的盐来对输入的密码进行哈希处理,从而消除盐增加的安全性?
- 如果我们通过在服务器端进行盐检索来避免之前的问题,那么我们是否会在某一时刻发送未加密的用户输入密码(以便稍后可以将其附加到检索到的盐中)?
最佳答案
盐不应该暴露在服务之外 - 你的直觉是正确的,这会暴露盐并引入风险。
您的客户端和服务器之间的任何通信都应通过 SSL 连接进行 - 或者至少使用某种交互加密。
请记住加盐的目的:让某人更难预先计算哈希码,从而在数据库遭到破坏的情况下能够查找密码。 8 位盐使散列空间大 256 倍,使预先计算变得更加困难。加盐与确保通信安全无关 - 还有其他解决方案。
关于database - 在密码加密中使用随机盐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4021065/