【问题标题】:Creating password hash in Laravel project在 Laravel 项目中创建密码哈希
【发布时间】:2019-09-01 17:39:43
【问题描述】:

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

$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm

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

$2y$10$Hnbg7DCp2VObns4cbr580uo9VTYgzJF2BSNSpA7S8BYjkAgfUlH.G

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

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

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

【问题讨论】:

标签: php laravel authentication hash


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以使用 bcrypt(secret") 并将其留在 laravel 并对其进行测试(一切正常)。

    【讨论】:

      【解决方案3】:

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

      更多信息,请看这里:https://stackoverflow.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);
        

        【讨论】:

          猜你喜欢
          • 2014-05-15
          • 2017-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-18
          • 1970-01-01
          相关资源
          最近更新 更多