【问题标题】:Upgrading user passwords from salted SHA1 to bcrypt将用户密码从加盐 SHA1 升级到 bcrypt
【发布时间】:2013-10-10 07:22:11
【问题描述】:

我受雇在新的 PHP 5.3 服务器上使用 Laravel 4 重建基于 CodeIgniter 1.7.3(在 PHP 4.2 服务器上)构建的积极使用的应用程序。

系统有大约 500 个用户,其密码使用加盐 SHA-1 哈希加密。我想使用 bcrypt 来增加应用程序的安全性以及与 Laravel 4 的身份验证系统集成。

您建议如何迁移这些用户的密码?

【问题讨论】:

  • 我相信有很多 5.3.13 配置,所以请确保服务器至少运行 5.3.7。

标签: php codeigniter laravel sha1 bcrypt


【解决方案1】:

哈希的全部意义在于您无法恢复原始密码。

您有三个选择:

  • 存储 SHA1 哈希的 bcrypt 哈希,然后对每个密码进行 SHA1 哈希,然后在每次登录时对其进行 bcrypt。
    这可能不是一个好主意

    李>
  • 在用户下次登录时升级每个哈希值。(以便您拥有要哈希的纯文本)
    这是最好的选择,但您需要保留 SHA1 哈希值和转换代码直到每个用户都登录

  • 将每个用户重置为随机 bcrypted 密码,并强制他们全部使用忘记密码将其改回。
    您可能不想这样做

【讨论】:

  • 还有第三个选项,重置用户密码。这不是一个好的选择,但如果你提到了双重哈希,你也应该提到这一点。
  • @ElonThan:是的;我刚做了。
  • 好点。之前没有正确考虑它,但选项 2 是有道理的。我将在用户表中添加一个 brcypt 字段,当用户登录时,我将对密码进行 bcrypt 散列并将其存储在新字段中,从记录中删除 SHA1 密码并添加一些条件逻辑以了解哪个字段比较,直到每个人都完全迁移。
  • @Nick:如果您有相当大的用户群,迁移所有人可能需要 很长时间 时间。
  • 正如 SLaks 所说,这可能需要很长时间。也许最好为每一行存储一个“算法”,告诉系统要使用的算法,并在下次登录时更新到 bcrypt。这样您以后也可以更改您的算法,您不必担心返回并删除您的 SHA 列并为某些用户弄乱数据。
【解决方案2】:
  • 在数据库中添加一列,告诉系统使用了哪种哈希算法
  • 登录时,正常检查凭据
  • 如果他们使用旧密码并且登录成功 - 对他们输入的密码进行 bcrypt 并在数据库中更新他们的密码和算法。

【讨论】:

  • 刚刚意识到这一点并评论了第一个答案!感谢您的帮助。
【解决方案3】:

您可以为每个用户创建一个随机密码,并使用新密码向每个人发送一封通知电子邮件。但是,如果用户没有看到电子邮件,这将导致混乱。

我建议您为 bcrypt 值添加另一个 db 字段,然后在更改后用户第一次登录时创建一个条目。您可以使用单独的字段或删除旧的哈希来跟踪。

当您的活跃用户迁移后,您可以随意对其余用户群使用随机密码方法来完成迁移。

【讨论】:

  • 刚刚意识到这一点并评论了第一个答案!感谢您的帮助。
猜你喜欢
  • 2012-09-16
  • 2017-01-26
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多