Php 将用户密码从salted SHA1升级到bcrypt
我受聘在新的PHP5.3服务器上使用Laravel4重建一个在CodeIgniter1.7.3(在PHP4.2服务器上)上构建的积极使用的应用程序 该系统大约有500名用户,他们的密码用salt SHA-1散列加密。我想使用bcrypt来提高应用程序的安全性,并与Laravel 4的身份验证系统集成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哈希。 这可能不是
您建议如何迁移这些用户密码?散列的全部要点是您无法恢复原始密码 您有三种选择:
- 存储SHA1哈希的bcrypt哈希,然后在每次登录时对每个密码进行bcrypt之前对其进行SHA1哈希。
这可能不是个好主意 - 在用户下次登录时升级每个哈希。(这样您就有了要散列的纯文本)
这是最好的选择,但您需要保留SHA1哈希和转换代码,直到每个用户登录 - 将每个用户重置为一个随机的bcrypted密码,并强制所有用户使用忘记的密码将其更改回来。
你可能不想这么做 - 在数据库中添加一列,告诉系统使用了哪种哈希算法
- 登录时,正常检查凭据
- 如果他们使用的是旧密码,并且登录成功-请键入他们输入的密码,并更新数据库中的密码和算法
当您的活动用户迁移后,您可以对剩余的用户群使用随机密码方法来完成迁移。还有第三个选项,重置用户密码。这不是一个好的选择,但是如果你提到了双哈希,你也应该提到它。@ElonThan:是的;我刚才说了,很好。以前没有好好考虑过,但选择2是有意义的。我将向用户表中添加一个brcypt字段,当用户登录时,我将对密码进行bcrypt哈希并将其存储在新字段中,从记录中删除SHA1密码,并添加一些条件逻辑,以便在所有人都完全迁移之前知道要与哪个字段进行比较。@Nick:如果你有一个相当大的用户基数,迁移每个人可能需要很长时间。正如SLaks所说,这可能需要很长时间。也许最好为每一行存储一个“算法”,告诉系统要使用的算法,并在下次登录时更新到bcrypt。通过这种方式,你可以在以后更改算法,你不必担心返回并删除SHA列,也不必为某些用户弄乱数据。你刚刚意识到这一点,并对第一个答案发表了评论!谢谢你的帮助。刚刚意识到这一点并对第一个答案发表了评论!感谢您的帮助。我相信有很多5.3.13配置,所以请确保服务器至少运行5.3.7。