我正在使用Laravel 5.4。我知道哈希是一种方式。正如我记得的那样,我将密码删除并保存在数据库中,当我想检查用户密码时,我会将输入的密码哈希并在数据库中使用散列字符串进行检查。
在laravel我只需要写下面的代码:
$email = $request['email'];
$pass = $request['password'];
if(Auth::attempt(['email'=> $email , 'password' => $pass])){
//return something
}
无需bcrypt($request['password']);
。
尽管我必须使用bcrypt
,但哈希字符串会有所不同。
如何Auth::attempt
使用bcrypt
密码密码来检查密码。
我需要解释Auth::attempt
在使用bcrypt
时的工作原理。我知道如何实现代码并检查密码。
答案 0 :(得分:0)
如果您使用的是Laravel应用程序附带的内置LoginController
和RegisterController
类,则会自动使用Bcrypt
进行注册和身份验证。
有关详细信息,请参阅此链接:https://laravel.com/docs/5.4/hashing
Laravel使用的散列方法每次都会生成一个不同的散列(即使对于相同的字符串)。它不会散列两个字符串并进行比较,而是使用未散列的字符串与散列进行比较。
check方法允许您验证给定的纯文本字符串是否与给定的哈希相对应。但是,如果您使用Laravel附带的LoginController,则可能不需要直接使用它,因为此控制器会自动调用此方法:
if (Hash::check('plain-text', $hashedPassword)) {
// The passwords match...
}
答案 1 :(得分:0)
Laravel使用bcrypt来哈希密码。每次使用bcrypt
都会产生随机盐。这就是我们提供相同的string
时获得不同哈希值的原因。
我们如何比较两个哈希?
随机盐会保存在旁边:
[full hash] = [random-salt-part]+[hashed-string-with-random-salt]
因此,为了进行比较,我们应该使用保存的随机盐部分而不是随机盐。这样我们将拥有相同的哈希值。
为什么要使用随机盐? 简而言之:为了防止被彩虹桌弄碎的可能性。 有关更详细的答案,请访问:https://security.stackexchange.com/questions/66989/how-does-a-random-salt-work