web-dev-qa-db-ja.com

ハッシュパスワードをLaravelで復号化する方法

私はこの多くをグーグルで検索しましたが、残念ながら実用的なソリューションは見つかりませんでした。

悪いテクニックを知っていますが、パスワードをメールでユーザーに送信する必要があります。

ユーザーハッシュパスワードを送信できましたが、このパスワードを解読できません。

以下は私が使用している手順です。

    $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.");

これを実現する方法を教えてください。

11
Kirmani88

簡単な答えは、パスワードを「復号化」しないことです(暗号化されていないため、ハッシュ化されているため)。

長い答えは、ユーザーにパスワードをメールで送信したり、他の方法で送信したりしないことです。ユーザーがパスワードを忘れた場合は、password resetメールを送信し、ウェブサイトでパスワードを変更できるようにする必要があります。

Laravelには、この機能のほとんどが組み込まれています( Laravelドキュメント を参照してください。ここではすべてを複製しません。バージョン 4.2 および 5. Laravelの)。

詳細については、「blogoverflow」の投稿をご覧ください: なぜパスワードをハッシュする必要があるか

24
samlev

ハッシュされたパスワードとプレーンテキストのパスワード文字列を比較するには、PHP password_verify

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