如何将字符串密码与 laravel 加密密码进行比较

Posted

技术标签:

【中文标题】如何将字符串密码与 laravel 加密密码进行比较【英文标题】:How to compare a string password with laravel Encrypted Password 【发布时间】:2017-11-25 12:53:56 【问题描述】:

我首先在 Laravel 中创建了一个 Web 应用程序。现在我正在使用 Ionic Frame 开发它的移动应用程序。

在使用 laravel 时,laravel 将密码转换为加密。 现在,在将 Ionic 中的 API 与 Laravel 集成时,我遇到了一个问题,即如何将通过移动应用输入的密码与 laravel 表中的加密密码进行比较。

如果它本来是网络应用程序,那么它工作正常,但对于 API 集成,我面临这个问题。请帮帮我

【问题讨论】:

为什么需要这样做?你有 Auth 门面:Auth::attempt(['email' => $email, 'password' => $password]),它返回 true/false 【参考方案1】:

两种方式:

1.

$hashedPassword = User::find(1)->password;

if (Hash::check('plain-text-password', $hashedPassword)) 
    // The passwords match...

$hashedPassword = User::find(1)->password;

if (Hash::make('plain-text-password') === $hashedPassword) 
  // The passwords match...

然而,正如官方文档所说,作为一种支持 DRY(不要重复自己)的方法,如果你使用 Laravel 附带的 LoginController,你可能不需要使用这两种方式直接,因为它已经自动执行第一种方式。

参考:https://laravel.com/docs/5.4/hashing

重要更新

这里发布的第二种方式不起作用,因为 Laravel 使用bcrypt,它会在每个哈希上随机生成一个盐;使每个散列与数据库中的原始散列密码不同。改用第一种方法。你也可以阅读Where are laravel password salts stored?。

【讨论】:

【参考方案2】:

Hash::check 是最好的方法。

if(Hash::check('plain password', 'encrypted password'))
    //enter your code

【讨论】:

以上是关于如何将字符串密码与 laravel 加密密码进行比较的主要内容,如果未能解决你的问题,请参考以下文章

MD5加密及密码验证

如何显示Laravel Nova中的加密字段值?

laravel5的Bcrypt加密方式对系统保存密码的小结

Flask 学习-25.passlib 对密码加密与验证

Laravel笔记-用户登录时密码进行RSA加密(提高系统安全性)

PHP如何对用户密码进行加密