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::make
和 bcrypt
加密同样一个密码得到的结果,每次也不一样。
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);
这个问题很困扰我,希望知道的同学解答一下~
一样的!
请翻阅源码,他们的最终指向的都是同一个方法。
底层是对PHP密码库的封装 http://php.net/manual/zh/function.password...
@YuxiangDong 非常感谢你的回答。就是说底层实现都是用
password_hash
方法。可同一个密码(比如
123456
)经过bcrypt
(或Hash::make
)处理后,得到的结果都是不同的。我现在验证旧密码的方式是用Hash::check
方法,能否请你简单说下这个方法起作用的原理是什么啊?pray:
官方文档的评论里有,check底层应该是password_verify方法
确实是这样,学习了:+1: