我创建了用户,我给了他密码'秘密'。注册过程生成的哈希是
$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm
我想在代码中生成它,所以我使用了Hash :: make('secret'),我得到了:
$2y$10$Hnbg7DCp2VObns4cbr580uo9VTYgzJF2BSNSpA7S8BYjkAgfUlH.G
最后我使用了bcrypt('秘密'),我得到了:
$2y$10$5g1bhkHB7kRk8SkM3yS/YOifsEesjZ31YeYnRlE.bxSBmZutVCuui
这些都是不同的哈希,我怎样才能生成一个让我在代码中更改密码的哈希?
这是因为bcrypt不能用作SHA-256,它使用的密钥会改变相同字符串的散列本身的结果。在Laravel中,您可以使用Hash::check('plain-text', $hashedPassword)
来检查密码,但是对于相同的密码,您将永远不会得到相同的结果。检查here
你可以使用bcrypt(秘密“)并将其留在laravel并测试它(一切正常)。
它按预期工作,bcrypt并不总是生成相同的哈希。对于给定密码的任何有效散列,Laravels Hash::check()
函数将返回true。
有关更多信息,请查看此处:qazxsw poi
Bcrypt是一种更安全的密码散列算法。与md5()或SHA1()不同,decrypt并不总是为特定字符串生成相同的散列值。
因此,当您将散列密码存储在数据库中时,您将使用
https://stackoverflow.com/a/8468936/6622577
之后,当您希望在登录时检查时,您只需设置纯文本密码(因为您可能从用户输入获取它)并运行一个名为Auth :: attempt()的函数来匹配密码。
$password = bcrypt($input['password']);
如果要显式检查与其哈希对应的纯文本密码,请使用Hash :: check(),如下所示:
$userdata = array(
'username' => $input['username'],
'password' => $input['password'],
);
if (Auth::attempt($userdata)) {
// Password matched
}