I am using Laravel's bcrypt function for hashing passwords. When I do,

bcrypt('secret')

I get

=> "$2y$10$mnPgYt2xm9pxb/c2I.SH.uuhgrOj4WajDQTJYssUbTjmPOcgQybcu"

But if I run it again, I get

=> "$2y$10$J8h.Xmf6muivJ4bDweUlcu/BaNzI2wlBiAcop30PbPoKa0kDaf9xi"

以此类推.

那么,如果每次都得到不同的值,密码匹配过程不会失败吗?

推荐答案

这就是bcrypt的工作原理.见wikipedia.

Bcrypt generates a random 128-bit salt during hashing. This salt becomes part of the hash, hence we always get a different hash value for the same input string. The random salt is actually used to deter brute-force attacks.

密码匹配过程不会因为哈希值不同而失败.

$hash1 = bcrypt('secret')
$hash2 = bcrypt('secret')

Hash::check('secret', $hash1)
Hash::check('secret', $hash2)

Hash::check两种情况下你都应该得到true分.

So even if the hash values are different, the password matching won't fail.

Laravel相关问答推荐

工厂多对多数据透视表属性

未定义防护 [api] 的授权驱动程序 [api]

如何在 Laravel 的外部 js 文件中包含 csrf_token()?

向 Laravel 模型查询添加计算字段

错误try 访问 null 类型值的数组偏移量laravel 5.8.26 Php 7.4.2

Laravel Request::input 调用未定义的方法

在 Laravel 5 中扩展请求类

Laravel 框架类在 PHPUnit 数据提供程序中不可用

Laravel 使用 Storage::put 生成唯一 ID

使用模型工厂、一对一和一对多关系定义 Laravel 外键,而不创建不必要的模型

Http请求多浏览器的烦恼

为什么客户凭证应该与 Laravel Passport 中的用户相关联?

在 Laravel 容器中覆盖单例

如何将Carbon 转换为字符串,只取日期?

如何使用命令行手动运行 laravel/lumen 作业(job)

Laravel 4 验证唯一(数据库)忽略当前

Carbon解析到 ISO8601

Laravel 单元测试依赖注入

如何在 laravel eloquent 中保存布尔值

你如何在 Laravel 5.3 的新通知服务生成的Electron邮件中添加图像?