【问题标题】:comparing value from input (password) with database's hashed value for password将输入(密码)中的值与数据库的密码哈希值进行比较
【发布时间】:2016-03-06 17:25:00
【问题描述】:

早安,

我正在创建一个程序,我需要的凭据就是密码。

$password = Input::get('password'); //eg: admin

当我尝试将它与已经散列的数据库值进行比较时。

$user = DB::table('users_table')->where('password',$password)->get(); 
//eg: hashed value for admin is '$10$zYy1fGLPh/eI/sj8YmkN8.sTTkD4k9t/gwrkgGWOIufHvRYhKwTay'.

我无法使用它获得任何成功的过滤器。我需要特殊功能吗?感谢您的帮助。

【问题讨论】:

  • 你如何散列 $password?

标签: php laravel hash credentials


【解决方案1】:

如果您使用 Laravel 内置的 Hash::make(),您将无法按照您尝试的方式进行操作。

当您对密码进行哈希处理(使用 Laravel 的哈希或 PHP 的 password_hash())时,您每次都会得到一个唯一的哈希。

您确实应该需要一个用户名,然后从该记录中获取密码哈希并使用Hash::check() 检查它。 否则,您将需要从数据库中获取所有密码,遍历它们并检查每个密码。根据散列算法中的“成本”,如果您有很多用户,这可能是一项昂贵的操作。

现在我不知道您的表中是否有多个用户,但如果有,如果他们有相同的密码会怎样?

【讨论】:

  • 谢谢@magnus Eriksson 先生的洞察力。我也认为你是对的,因为每次我刷新浏览器时,哈希值也会发生变化......我想我正在尝试做有点不可撤销xD
  • 不幸的是,是的。当您有多个用户时,您应该始终拥有一个用户名(或任何其他标识符,如电子邮件等......)。密码不是用来识别它是哪个用户,它只是用来检查用户是他/她声称的那个人。
【解决方案2】:

您似乎正在尝试比较普通的$password,而不是尝试对其进行哈希处理,然后进行比较,例如

DB::table('users_table')->where('password', some_hash_function($password))->get() 

【讨论】:

    【解决方案3】:

    如果您的数据库中的密码经过哈希处理,那么您需要使用您在数据库中存储哈希密码时使用的相同机制对用户输入的密码进行哈希处理,然后再将其用作搜索条件。否则当然不会匹配数据库上的值,即使它是正确的、未散列的值。

    $password = Input::get('password'); //eg: admin
    $password = your_hash_function($password);
    
    
    $user = DB::table('users_table')->where('password',$password)->get(); 
    

    【讨论】:

    • 谢谢先生的想法。我尝试使用`$password = Hash::make('admin')`然后将它与数据库上的哈希值进行比较,但它没有给我true 结果。我也尝试回显`$password = Hash::make('admin');` 但每次我刷新浏览器时,值都会改变 xD
    • 使用Hash::make($password),因为它是用户输入的密码,你想用它做一个哈希,而不是像'admin'这样的任意字符串
    • 由于 Hash::make() 每次使用时都会给你一个唯一的哈希,它永远不会匹配存储在数据库中的哈希,所以这不起作用。
    • @MagnusEriksson 谢谢你,不是 Laravel 专家,原来的答案是通用的,所以我已将其恢复为通用
    【解决方案4】:

    你可以使用哈希检查

    Hash::check('password', $password);
    

    【讨论】:

      【解决方案5】:

      你用来散列密码的方法是什么? 那么您必须将数据库中的密码与从输入中获得的密码的相同哈希方法进行比较

      【讨论】:

        猜你喜欢
        • 2017-08-05
        • 2021-10-23
        • 1970-01-01
        • 2021-09-27
        • 1970-01-01
        • 2019-07-02
        • 1970-01-01
        • 1970-01-01
        • 2015-08-15
        相关资源
        最近更新 更多