我有一个现有的数据库,其中包含大约 160 万用户。目前密码存储为加盐 SHA1,我想将它们全部升级为加盐 SHA256。
到目前为止,我采取的方法是在每个用户登录时迁移他们,本质上是根据旧哈希验证他们的密码,如果匹配,则创建一个新的更强的哈希。这工作正常,但这是一个缓慢的过程。
据我所知,没有简单的方法可以简化此过程。有没有更好的办法?
我有一个现有的数据库,其中包含大约 160 万用户。目前密码存储为加盐 SHA1,我想将它们全部升级为加盐 SHA256。
到目前为止,我采取的方法是在每个用户登录时迁移他们,本质上是根据旧哈希验证他们的密码,如果匹配,则创建一个新的更强的哈希。这工作正常,但这是一个缓慢的过程。
据我所知,没有简单的方法可以简化此过程。有没有更好的办法?
除非您将原始明文密码存储在某处,否则您无法“升级”哈希。被散列的文本被破坏了,你不能简单地“un-sh1”来取回它。您的方法可能是唯一实用的方法,除非您想为您的用户批量生成新的基于 sha256 的密码并将新密码通过电子邮件发送给他们。
您所描述的是将用户从较弱/较旧的哈希算法迁移到更强/较新的哈希算法的适当且合法的方法。我已经在多种情况下成功地实施了这种技术。尝试一次迁移所有人是一个可怕的 UX 想法,然后您会遇到需要邮寄密码的问题,由于安全和 UX 等多种原因,这是一个坏主意。
我建议,由于您现在正在进行这样的努力,因此您考虑使用与加盐 SHA-256 不同的算法。Salted SHA-512 提供了更高级别的安全性,并且实施一个拉伸散列的方案甚至更好(对 SHA-512 进行大量迭代 - 当然从密码+salt 开始)。或者,您可以利用专门为密码散列设计的算法,例如 bcrypt、scrypt 或 PBKDF2。