【问题标题】:How does Auth::attempt check password in Laravel?Auth::attempt 如何在 Laravel 中检查密码?
【发布时间】:2017-08-19 06:35:45
【问题描述】:

我正在使用 Laravel 5.4。我知道散列是一种方式。我记得,我对密码进行了哈希处理并将它们保存在数据库中,当我想检查用户密码时,我会对他们输入的密码进行哈希处理,并使用数据库上的哈希字符串进行检查。

在 laravel 中我只需要编写以下代码:

 $email = $request['email'];
 $pass = $request['password'];

 if(Auth::attempt(['email'=> $email , 'password' => $pass])){
       //return something
   } 

不用bcrypt($request['password']);

尽管每次我必须使用 bcrypt 时,哈希字符串都会有所不同。

Auth::attempt 如何使用bcrypt 哈希密码来检查密码。


我需要解释一下Auth::attempt 在使用bcrypt 时的工作原理。我知道如何实现代码和检查密码。

【问题讨论】:

  • 使用 bcrypt 不是检查确切的字符串,而是检查无法在质询中解密的格式
  • 前。如果它给出相同的字符串,我们可以猜出其他人的密码
  • 他们已经内置了Auth::attempt函数!所以只需检查该功能
  • 您尝试收集哪些信息? Laravel 是开源的,为什么不查看源代码以获取更多详细信息?
  • 已找到答案。我只是在编辑我的问题:)

标签: php authentication laravel-5 hash bcrypt


【解决方案1】:

Laravel 使用 bcrypt 进行哈希密码。 bcrypt 每次使用时都会生成随机盐。这就是我们在提供相同的string 时得到不同哈希的原因。

我们如何比较两个哈希?

随机盐会保存在旁边:

[full hash] = [random-salt-part]+[hashed-string-with-random-salt]

所以为了比较我们应该使用保存的随机盐部分而不是使用随机盐。这样我们就会有相同的哈希值。

为什么要使用随机盐? 简而言之:与被彩虹桌破解的可能性作斗争。 更详细的答案请访问:https://security.stackexchange.com/questions/66989/how-does-a-random-salt-work

【讨论】:

    【解决方案2】:

    如果您使用 Laravel 应用程序中包含的内置 LoginControllerRegisterController 类,它们将自动使用 Bcrypt 进行注册和身份验证。

    更多详情可以参考这个链接:https://laravel.com/docs/5.4/hashing

    Laravel 使用的散列方法每次都会生成不同的散列(即使对于相同的字符串)。它不会对两个字符串进行散列并比较它们,而是使用未散列的字符串与散列进行比较。

    check 方法允许您验证给定的纯文本字符串是否对应于给定的哈希值。然而,如果你使用 Laravel 自带的 LoginController,你可能不需要直接使用它,因为这个控制器会自动调用这个方法:

    if (Hash::check('plain-text', $hashedPassword)) {
        // The passwords match...
    }
    

    【讨论】:

    • 我知道我可以使用 bcrypt。我知道他们也使用 bcrypt。我只想知道他们如何检查哈希字符串,而具有相同输入的每个 bcrypt 函数的结果会不同
    • 它不与散列字符串比较它与普通密码比较散列字符串类似 if (Hash::check('plain-text', $hashedPassword)) {}
    • 希望这能帮助你理解。如果您有任何问题,请告诉我!
    • bcrypt 输出每次都会变化,Hash::Check hash 纯文本如何才能生成 bcrypt 创建的内容?
    • yes hash::check 将纯文本与散列文本进行比较,如果两个字符串都匹配则返回 true..您可以查看我更新的答案
    猜你喜欢
    • 1970-01-01
    • 2016-12-30
    • 2014-08-27
    • 2018-05-20
    • 2013-04-06
    • 1970-01-01
    • 2017-09-13
    • 2023-03-05
    • 2019-10-29
    相关资源
    最近更新 更多