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

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 '$zYy1fGLPh/eI/sj8YmkN8.sTTkD4k9t/gwrkgGWOIufHvRYhKwTay'.

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

您似乎在尝试比较普通的 $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(); 

您用来散列密码的方法是什么? 那么您必须将数据库中的密码与从 Input

获得的密码的相同哈希方法进行比较

可以使用哈希校验

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

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

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

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

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