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