将password_hash更改为bcrypt

时间:2018-10-26 21:21:13

标签: php laravel encryption passwords laravel-5.6

我接受了一个旧项目,并开始与Laravel再次进行开发,但是我正在为已经在数据库中注册的使用权用户苦苦挣扎。

我相信他们使用

加密了密码
  

password_hash('',PASSWORD_DEFAULT)方法

但是我认为Laravel使用了

  

Bcrypt()

所以我无法使用这些凭据登录。有什么办法可以更改加密?

我不想让用户更改密码或其他任何内容

2 个答案:

答案 0 :(得分:4)

读取the very fine manual reveals PASSWORD_BCRYPT方法:

password_hash("thepassword", PASSWORD_BCRYPT);

如果他们拥有现有密码,则无论如何对密码进行散列,都可以使用password_verify()确认密码。


您只能将用户的密码哈希转换为新的密码哈希。您将需要添加另一列以保存新密码,然后在他们登录时检查现有密码(如果可能,请进行验证),并在新列中输入空白。如果新列不是空白,则与password_verify()进行比较。如果为空,请使用显示的方法对新密码进行哈希处理。

最终,每个人​​都将在登录时更改其哈希方法,但是您将需要做一些工作才能使代码的形状足以安全可靠地执行转换。

答案 1 :(得分:0)

Laravel使用bcrypt哈希,与password_hash使用PASSWORD_BCRYPT或PASSWORD_DEFAULT算法使用的哈希相同。

因此,哈希值已经与Laravel兼容。可以使用修补程序很容易地验证这一点:

> $hash = password_hash('test', PASSWORD_DEFAULT);
"$2y$10$OpnZSN0EbAzMCvywTAWyWOqOme6/3N/xe.nrpcUO6mhLumMxL6DYm"
> Hash::check('test', $hash);
true

Laravel还允许您通过绑定到ioc容器轻松地插入自己的Hasher接口实现。