web-dev-qa-db-fra.com

Comment décrypter le mot de passe de hachage dans Laravel

J'ai google beaucoup, mais malheureusement, je n'ai trouvé aucune solution de travail.

Je sais que c'est une mauvaise technique, mais je dois envoyer son mot de passe à l'utilisateur par e-mail.

J'ai réussi à envoyer le mot de passe de l'utilisateur Hash, mais je ne parviens pas à déchiffrer ce mot de passe.

Voici la procédure que j'utilise.

    $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');
            });

Le code ci-dessus envoie Encrypted mot de passe à l'utilisateur par e-mail mais lorsque j'essaie de décrypter, il me donne le message d'erreur suivant.

$decrypt= Crypt::decrypt($data->password);  

Données invalides.

throw new DecryptException("Invalid data.");

Veuillez me guider comment y parvenir ..

11
Kirmani88

La réponse courte est que vous ne "déchiffrez" pas le mot de passe (car il n'est pas chiffré - il est haché).

La réponse longue est que vous ne devez pas envoyer à l'utilisateur son mot de passe par e-mail ou de toute autre manière. Si l'utilisateur a oublié son mot de passe, vous devez lui envoyer un e-mail de réinitialisation du mot de passe , et lui permettre de changer son mot de passe sur votre site Web.

Laravel a la plupart de ces fonctionnalités intégrées (voir la documentation Laravel - Je ne vais pas tout reproduire ici. Également disponible pour les versions 4.2 et 5. de Laravel).

Pour plus de lecture, consultez ce post 'blogoverflow': Pourquoi les mots de passe doivent être hachés .

24
samlev

Pour comparer le mot de passe haché avec la chaîne de mot de passe en texte brut, vous pouvez utiliser le PHP password_verify

if(password_verify('1234567', $crypt_password_string)) {
    // in case if "$crypt_password_string" actually hides "1234567"
}
3
Alex