将来自输入(密码)的值与数据库';s密码的哈希值


comparing value from input (password) with database's hashed value for password

你好,

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

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

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

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

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

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

现在我不知道你的表中是否有多个用户,但如果有,如果他们有相同的密码会发生什么?

您似乎在尝试比较普通的$password,而不是尝试对其进行散列,然后进行比较,例如

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

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

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

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

您可以使用哈希检查

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

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