У меня есть этот код:
$password = vancab123;
password_hash(base64_encode( hash('sha512',$password, true) ), PASSWORD_DEFAULT );
База данных хранится значение:
$password = $2y$10$jUa8ZEFBX5lfsBmySUnJFeSSyKwQ1v/emazJZPh8MwJ0g0lLbmjYC;
Моя проблема:
Я использовал это для функции «запомнить меня». Если пользователь использовал эту функцию, его / ее учетные данные (адрес электронной почты и пароль) будут сохранены в течение 7 дней с использованием файла cookie.
Моя проблема в том, что электронная почта и пароль автоматически заполнят текстовые поля электронной почты и пароля, символы текстового поля пароля слишком длинные, потому что они были хешированы.
Как я могу сопоставить длину хешированного пароля с оригинальным / не хэшированным паролем?
И вам не нужно прыгать через все эти обручи, чтобы использовать password_hash
и это как проверить, что введенный пароль соответствует ранее хешированному паролю
Смысл HASH в том, что он не может (в разумных временных рамках) быть преобразован обратно в исходное значение. Вместо этого вы должны сравнить его с помощью password_verify () с не хэш-значением, которое вводит пользователь, когда он возвращается и пытается войти в систему, используя тот же пароль.
$password = 'vancab123';
$hashed_pwd = password_hash($password);
// test the hashed password
if ( password_verify($password, $hashed_pwd) ) {
//password entered is OK
} else {
//password entered is WRONG
}
ДОПОЛНЕНИЕ после того, как вы уточнили свой вопрос:
Прочитайте это для функциональности Запомнить меня Каков наилучший способ реализации "Запомни меня" для сайта?
Хеш — одностороннее преобразование произвольного значения. Они по своей природе необратимы. В вашем случае вам придется хешировать пароль, предоставленный пользователем, извлечь значение из БД и выполнить сравнение обоих хешированных значений.
Единственной альтернативой будет парадигма, лежащая в основе радужной атаки, в которой вы хэшируете все мыслимые возможности и сохраняете их в виде пар ключ-значение, но это много данных.