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);

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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 6

一样的!

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

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

6年前 评论

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

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

pray:

6年前 评论

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

6年前 评论

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

6年前 评论

file

1个月前 评论
anjing 1个月前

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