【问题标题】:Whats a decent way to upgrade from SHA1 to SHA256?什么是从 SHA1 升级到 SHA256 的好方法?
【发布时间】:2012-08-22 07:49:31
【问题描述】:

我有一个现有的数据库,其中包含大约 160 万用户。目前密码存储为加盐 SHA1,我想将它们全部升级为加盐 SHA256。

到目前为止,我采用的方法是在每个用户登录时迁移他们,本质上是根据旧哈希验证他们的密码,如果匹配,则创建一个新的更强的哈希。这工作正常,但这是一个缓慢的过程。

据我所知,没有简单的方法可以简化此过程。有没有更好的办法?

【问题讨论】:

  • 我建议切换到更面向未来的哈希,例如 bcrypt,更多信息在这里:stackoverflow.com/a/10963468/1217408
  • 你的方法有什么问题。每次登录此过程所花费的额外时间非常微不足道,并且分布在相对较长的时间段内(我猜不是每个人都尝试一次登录)。您是否有理由需要每个人都立即使用新的哈希值?加盐的 SHA1 哈希非常安全,所以我无法想象有一个巨大的商业案例来加速这个过程。

标签: security


【解决方案1】:

您所描述的是将用户从较弱/较旧的哈希算法迁移到更强/较新的哈希算法的适当且合法的方法。我已经在多种情况下成功地实施了这种技术。尝试一次迁移所有人是一个糟糕的用户体验想法,然后您会遇到需要邮寄密码的问题,出于安全和用户体验等多种原因,这是一个坏主意。

我建议,既然您现在正在进行这样的工作,那么您可以考虑使用与加盐 SHA-256 不同的算法。 Salted SHA-512 提供了更高级别的安全性,并且实施一个拉伸散列的方案甚至更好(对 SHA-512 进行大量迭代 - 当然从密码+salt 开始)。或者,您可以利用专门为密码散列设计的算法,例如 bcrypt、scrypt 或 PBKDF2。

【讨论】:

    【解决方案2】:

    除非您将原始明文密码存储在某处,否则您无法“升级”哈希。被散列的文本被破坏了,你不能简单地“un-sh1”来取回它。您的方法可能是唯一实用的方法,除非您想为您的用户批量生成新的基于 sha256 的密码并将新密码通过电子邮件发送给他们。

    【讨论】:

      猜你喜欢
      • 2015-05-22
      • 1970-01-01
      • 2011-02-15
      • 2011-03-09
      • 2012-03-28
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      • 2010-09-12
      相关资源
      最近更新 更多