将输入(密码)的值与密码的数据库散列值进行比较

时间:2015-12-02 12:52:52

标签: php laravel hash credentials

美好的一天,

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

$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'.

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

5 个答案:

答案 0 :(得分:3)

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

当您使用Laravel' Hash或PHP' s password_hash()来哈希密码时会发生什么,每次都会获得一个唯一的哈希值。

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

现在我不知道你的桌面上是否有多个用户,但如果你这样做,如果他们有相同的密码会怎么样?

答案 1 :(得分:1)

您似乎正在尝试比较普通$password,而是尝试哈希,然后进行比较,例如。

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

答案 2 :(得分:1)

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

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


$user = DB::table('users_table')->where('password',$password)->get(); 

答案 3 :(得分:0)

用于散列密码的方法是什么? 那么你必须比较数据库中的密码和从输入

获得的密码的相同哈希方法

答案 4 :(得分:0)

您可以使用哈希检查

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