Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将用户密码从salted SHA1升级到bcrypt_Php_Codeigniter_Laravel_Sha1_Bcrypt - Fatal编程技术网

Php 将用户密码从salted SHA1升级到bcrypt

Php 将用户密码从salted SHA1升级到bcrypt,php,codeigniter,laravel,sha1,bcrypt,Php,Codeigniter,Laravel,Sha1,Bcrypt,我受聘在新的PHP5.3服务器上使用Laravel4重建一个在CodeIgniter1.7.3(在PHP4.2服务器上)上构建的积极使用的应用程序 该系统大约有500名用户,他们的密码用salt SHA-1散列加密。我想使用bcrypt来提高应用程序的安全性,并与Laravel 4的身份验证系统集成 您建议如何迁移这些用户密码?散列的全部要点是您无法恢复原始密码 您有三种选择: 存储SHA1哈希的bcrypt哈希,然后在每次登录时对每个密码进行bcrypt之前对其进行SHA1哈希。 这可能不是

我受聘在新的PHP5.3服务器上使用Laravel4重建一个在CodeIgniter1.7.3(在PHP4.2服务器上)上构建的积极使用的应用程序

该系统大约有500名用户,他们的密码用salt SHA-1散列加密。我想使用bcrypt来提高应用程序的安全性,并与Laravel 4的身份验证系统集成


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

散列的全部要点是您无法恢复原始密码

您有三种选择:

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

  • 在用户下次登录时升级每个哈希。(这样您就有了要散列的纯文本)
    这是最好的选择,但您需要保留SHA1哈希和转换代码,直到每个用户登录

  • 将每个用户重置为一个随机的bcrypted密码,并强制所有用户使用忘记的密码将其更改回来。
    你可能不想这么做

      • 在数据库中添加一列,告诉系统使用了哪种哈希算法
      • 登录时,正常检查凭据
      • 如果他们使用的是旧密码,并且登录成功-请键入他们输入的密码,并更新数据库中的密码和算法

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

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


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

      还有第三个选项,重置用户密码。这不是一个好的选择,但是如果你提到了双哈希,你也应该提到它。@ElonThan:是的;我刚才说了,很好。以前没有好好考虑过,但选择2是有意义的。我将向用户表中添加一个brcypt字段,当用户登录时,我将对密码进行bcrypt哈希并将其存储在新字段中,从记录中删除SHA1密码,并添加一些条件逻辑,以便在所有人都完全迁移之前知道要与哪个字段进行比较。@Nick:如果你有一个相当大的用户基数,迁移每个人可能需要很长时间。正如SLaks所说,这可能需要很长时间。也许最好为每一行存储一个“算法”,告诉系统要使用的算法,并在下次登录时更新到bcrypt。通过这种方式,你可以在以后更改算法,你不必担心返回并删除SHA列,也不必为某些用户弄乱数据。你刚刚意识到这一点,并对第一个答案发表了评论!谢谢你的帮助。刚刚意识到这一点并对第一个答案发表了评论!感谢您的帮助。我相信有很多5.3.13配置,所以请确保服务器至少运行5.3.7。