在 Laravel 项目中创建密码哈希
Posted
技术标签:
【中文标题】在 Laravel 项目中创建密码哈希【英文标题】:Creating password hash in Laravel project 【发布时间】:2019-09-01 17:39:43 【问题描述】:我创建了用户并给了他密码“秘密”。 注册过程生成的哈希是
$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm
我想在代码中生成它,所以我使用了 Hash::make('secret') 并且得到了:
$2y$10$Hnbg7DCp2VObns4cbr580uo9VTYgzJF2BSNSpA7S8BYjkAgfUlH.G
最后我使用了 bcrypt('secret') 并且得到了:
$2y$10$5g1bhkHB7kRk8SkM3yS/YOifsEesjZ31YeYnRlE.bxSBmZutVCuui
这些都是不同的哈希值,我如何生成一个可以让我在代码中更改密码的哈希值?
【问题讨论】:
请发布您到目前为止所尝试的内容。请花点时间查看以下操作方法资源:How to Ask 和 How to create complete examples。 【参考方案1】:这是因为 bcrypt 不能作为 SHA-256 工作,它使用的密钥会更改同一字符串的哈希结果本身。
在 Laravel 中,你可以使用Hash::check('plain-text', $hashedPassword)
来检查密码,但你永远不会得到相同的密码相同的结果。检查here
【讨论】:
【参考方案2】:您可以使用 bcrypt(secret") 并将其留在 laravel 并对其进行测试(一切正常)。
【讨论】:
【参考方案3】:它按预期工作,bcrypt 并不总是生成相同的哈希。 Laravel Hash::check()
函数将对给定密码的任何有效哈希返回 true。
更多信息,请看这里:https://***.com/a/8468936/6622577
【讨论】:
【参考方案4】: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);
【讨论】:
以上是关于在 Laravel 项目中创建密码哈希的主要内容,如果未能解决你的问题,请参考以下文章