сравнение значения из ввода (пароля) с хэшированным значением базы данных для пароля

Добрый день,

Я создаю программу, где все, что мне нужно для учетных данных, это пароль.

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

Я не могу получить какой-либо успешный фильтр с ним. Нужны ли для этого специальные функции? Спасибо за помощь.

0

Решение

Если вы используете встроенный в Laravel Hash::make() Вы не сможете сделать это так, как вы пытаетесь.

Что происходит, когда вы хэшируете пароль (используя хэш Laravel или PHP password_hash()является то, что вы получаете уникальный хэш каждый раз.

Вам действительно нужно указать имя пользователя, затем извлечь хэш пароля из этой записи и проверить его с помощью Hash::check(),
В противном случае вам нужно будет извлечь все пароли из базы данных, пройти их и проверить каждый. В зависимости от «стоимости» в алгоритме хеширования, это может быть дорогостоящей операцией, если у вас много пользователей.

Теперь я не знаю, есть ли у вас несколько пользователей в вашей таблице, но если вы это сделаете, что произойдет, если у них будет один и тот же пароль?

3

Другие решения

Кажется, вы пытаетесь сравнить обычный $passwordвместо этого попробуйте его хешировать, затем сравните, например,

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

Если пароль в вашей базе данных хэширован, то вам нужно будет хэшировать пароль, который вводит пользователь, используя тот же механизм, который вы использовали при сохранении хешированного пароля в базе данных, прежде чем использовать его в качестве критерия поиска. В противном случае, конечно, он не будет соответствовать значению в базе данных, даже если это правильное, не хэшированное значение.

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


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

Вы можете использовать проверку хэша

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

Какой метод вы использовали для хэширования пароля?
Затем вы должны сравнить пароль в вашей базе данных с тем же методом хеширования для пароля, полученного из ввода

0
По вопросам рекламы [email protected]