Как расшифровать пароль Hash в Laravel
У меня есть google это alot, но unfortunatilty не нашел никакого рабочего решения.
Я знаю его плохую технику, но мне нужно отправить пользователю свой пароль по электронной почте.
Мне удалось отправить пароль пользователя Hash, но я не могу расшифровать этот пароль.
Ниже приводится процедура, которую я использую.
$results = DB::select("select * from dockl_users where email='" . Input::get('email') ."';");
foreach($results as $data){
$password= $data->password;
$email= $data->email;
}
Mail::send('passwordRecovery', array('email' =>$password), function($message)
{
$message->to(Input::get('email') )->subject('Password Recovery');
});
Вышеприведенный код отправляет Encrypted
пароль пользователю по электронной почте, но когда я пытаюсь расшифровать, он дает мне следующее сообщение об ошибке.
$decrypt= Crypt::decrypt($data->password);
Неверные данные.
throw new DecryptException("Invalid data.");
Пожалуйста, помогите мне, как этого достичь.
Ответы
Ответ 1
Короткий ответ заключается в том, что вы не "расшифровываете" пароль (потому что он не зашифрован - он хеширован).
Долгий ответ заключается в том, что вы не должны отправлять пользователю свой пароль по электронной почте или любым другим способом. Если пользователь забыл свой пароль, вы должны отправить им пароль для сброса пароля и разрешить им изменять свой пароль на своем веб-сайте.
Laravel имеет большую часть этой функциональности (см. Документацию Laravel - я не собираюсь реплицировать все это здесь. Также доступен для версий 4.2 и 5.0 Laravel).
Для дальнейшего чтения ознакомьтесь с этим сообщением "blogoverflow": почему пароли должны быть хэшированы.
Ответ 2
Для сравнения хэшированного пароля с строкой простого текстового пароля вы можете использовать PHP password_verify
if(password_verify('1234567', $crypt_password_string)) {
// in case if "$crypt_password_string" actually hides "1234567"
}