bcrypt ('password') 和 Hash::make ('password') 一样吗?

在 Laravel 认证系统里注册用户时,采用 bcrypt 方法加密密码。

 $user = User::create([
    'name' => $data['name'],
    'email' => $data['email'],
    'password' => bcrypt($data['password']),
     'confirmation_code' => str_random(60),
]);

在 Laravel 文档的 「Hashing」一节,给出的修改密码范例中,使用 Hash::make 方法加密密码。

$request->user()->fill([
    'password' => Hash::make($request->newPassword)
 ])->save();

我想知道它们底层实现是不是基于一样的代码逻辑。而且,我发现使用 Hash::makebcrypt 加密同样一个密码得到的结果,每次也不一样。

var_dump(bcrypt('123456'));
var_dump(bcrypt('123456'));

// 输出
string(60) "$2y$10$2p/qUwhEBq1JCRHy/1jY/uPUaG30W2amvu/hPXItYA3BLSsWhP5RC" 
string(60) "$2y$10$gJIQbqjza9jto9vzamLzP.ZUTUCeJLxiXyFSendByH7uh/V7N1yGO"

而且,在我写更新密码功能时,验证输入的旧密码时,就要使用 Hash::check 检查。

Hash::check($inputPassword, Auth::user()->password);

这个问题很困扰我,希望知道的同学解答一下~

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

一样的!

请翻阅源码,他们的最终指向的都是同一个方法。

底层是对PHP密码库的封装 http://php.net/manual/zh/function.password...

3年前 评论

@YuxiangDong 非常感谢你的回答。就是说底层实现都是用 password_hash 方法。

可同一个密码(比如 123456)经过 bcrypt(或 Hash::make)处理后,得到的结果都是不同的。我现在验证旧密码的方式是用 Hash::check 方法,能否请你简单说下这个方法起作用的原理是什么啊?

pray:

3年前 评论

官方文档的评论里有,check底层应该是password_verify方法

3年前 评论

确实是这样,学习了:+1:

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!