在Laravel项目中创建密码哈希

时间:2019-04-11 07:03:39

标签: php laravel authentication hash

我创建了用户,并给了他密码'secret'。 注册过程生成的哈希是

$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm

我想在代码中生成它,所以我使用了Hash :: make('secret'),我得到了:

$2y$10$Hnbg7DCp2VObns4cbr580uo9VTYgzJF2BSNSpA7S8BYjkAgfUlH.G

最后我使用了bcrypt('secret'),我得到了:

 $2y$10$5g1bhkHB7kRk8SkM3yS/YOifsEesjZ31YeYnRlE.bxSBmZutVCuui

这些都是不同的哈希,如何生成一个可以让我在代码内更改密码的哈希?

4 个答案:

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