在Laravel项目中创建密码哈希

问题描述 投票:0回答:4

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

$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm

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

$2y$10$Hnbg7DCp2VObns4cbr580uo9VTYgzJF2BSNSpA7S8BYjkAgfUlH.G

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

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

这些都是不同的哈希,我怎样才能生成一个让我在代码中更改密码的哈希?

php laravel authentication hash
4个回答
1
投票

这是因为bcrypt不能用作SHA-256,它使用的密钥会改变相同字符串的散列本身的结果。在Laravel中,您可以使用Hash::check('plain-text', $hashedPassword)来检查密码,但是对于相同的密码,您将永远不会得到相同的结果。检查here


0
投票

你可以使用bcrypt(秘密“)并将其留在laravel并测试它(一切正常)。


0
投票

它按预期工作,bcrypt并不总是生成相同的哈希。对于给定密码的任何有效散列,Laravels Hash::check()函数将返回true。

有关更多信息,请查看此处:qazxsw poi


0
投票

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
}
© www.soinside.com 2019 - 2024. All rights reserved.