Как расшифровать пароль 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"
}