在 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 项目中创建密码哈希的主要内容,如果未能解决你的问题,请参考以下文章

在Laravel中创建记录后发送通知

我可以在密码哈希函数中创建用户对象吗?

如何在 laravel 中创建 api 忘记密码和更改密码? [复制]

在 PHP 中创建安全密码哈希但检查 Access VBA

如何在 Laravel 5 中创建表迁移

text 在root中创建laravel项目