使用 sha256 将密码转换为 sha256 + salt

Convert passwords with sha256 to sha256 + salt

我有一个很大的数据库,其中的用户名和密码在 sha256 散列中。现在我写新版本,我想使用 sha256+salt。有没有办法将相同的 sha256 密码转换为 sha256+salt 并且登录没有问题?

加盐和散列密码的方法是获取明文密码,向其中添加盐,然后对其进行散列。当你有一个已经 sha256 散列的现有密码数据库时,你没有明文密码,并且一旦散列后你就不能轻易地以明文形式恢复它们(这是一件好事)。

可以 做的是采用当前形式的密码,经过 sha256 哈希处理,添加盐,然后再次对其进行哈希处理 - 或更好:很多次,使用更好的散列算法。

验证密码的功能将重复这些步骤以检查密码是否正确。假设第二个哈希只是一次 sha256 哈希以使示例更清楚,尽管它 不够安全:

  1. step1 = sha256(plaintext_password)
  2. 密码=sha256(步骤1+盐)

如果您真的想避免在现有哈希之上工作,您可以创建一个新的 table 用户,从一开始就以新的方式处理密码,然后逐渐将用户的密码迁移到新的 table,因为他们使用明文密码登录,并将它们从旧的 table 中删除。

第三种解决方案可能是停用所有旧帐户并要求他们更改密码,然后才能通过 fx 再次登录。向他们发送电子邮件 link 以更改他们的密码。

有道理吗?

也就是说,您将在 https://security.stackexchange.com . For instance I just found this question on why salt->sha256 hashing once is insufficiently secure, and another one here 上获得更多有关如何处理密码以实现更安全存储的合格答案。

当然让你的密码散列更安全是个好主意,但使用加盐的 SHA-256 是错误的方法。

最佳做法是使用具有成本因子的密码哈希函数,这样可以控制计算哈希所需的时间。好的算法是 BCrypt、SCrypt、Argon2 和 PBKDF2。在另一个 answer 中,我试图解释如何切换到新算法。

像 SHA-256 这样的快速散列的问题是 GPU 令人难以置信的速度,人们可以用负担得起的硬件来暴力破解 3 Giga SHA-256 per second