2017-09-06 30 views
0

登録のためのlaravel私はLaravelのinbuilt bcrypt関数の代わりにパスワードの暗号化アルゴリズムを使用しています。なぜなら、パスワードを忘れたときにパスワードを取得してメールに送信するからです。Laravel - DecryptException: 'MACが無効です'

しかし、それは私がこのコードを実行すると、誰もが

を助けてくださいすることができ、それは私がコードを記載している以下の作業をされていないローカルなく、サーバー自体に取り組んでいる、

DecryptException The MAC is invalid in Encrypter.php (line 184) 

このようなエラーを示している解読

public function forgotpassword(Request $request) 
{ 
    $email=$request->email; 
    $selectemail = User::select('email','password','name') 
    ->where('email',$email) 
    ->first();  

    if($selectemail)      
    {         
    $password=decrypt($selectemail->password); 
    $data = array('email' => $selectemail->email,'password' => $password , 'name' => $selectemail->name); 

    Mail::send('email.resetpassword',$data,function($message) use ($email) 
    { 
     $message->to([$email])->subject('Forgot Password Letgo'); 
    }); 
     echo "Mail has sent successfully"; 
    } else { 
    echo "This email is not yet registered"; 
    }    
} 
+0

データベース内のテーブルの構造を確認してください。長い文字列を保存するには短すぎると思われ、ストリップを取得します。 – Troyer

+0

okありがとう....しかし、なぜそれがローカルマシンで動作していて、私は同じデータベースのみを使用しています – user7346035

+0

ブラウザからキャッシュ/クッキーをクリアしてください。 – Troyer

答えて

3

問題は、新しいAPP_KEYを生成した場合、古い暗号化されたデータを復号しようとすると、DecryptException: The MAC is invalidが表示されます。

古いデータのプロパティにアクセスする場合は、古いAPP_KEYを復元する必要があります。

新しい問題を追加した後、別のAPP_KEYや別の暗号化方式で新しいデータを保存した場合、データがテーブルに混在しているためデータに問題があります。いつ新しい暗号化方式で始めるのですか?最も速い解決策は、新しい暗号化方式ですべてのパスワードをリセットすることです。

1

これを回避するには、代わりにカスタムキーを使用します。デフォルトの鍵はAPP_KEYですが、復号化が新しいAPP_KEYまたは古いAPP_KEYにリンクされないようにすることができます。 私はそれを解決するために、次のコードを使用し、別のAPP_KEYで動作しました。キーの長さのための重要な

function customCrypt($vWord){ 
    $customKey = "blabla_key_with_correct_length"; 
    $newEncrypter = new \Illuminate\Encryption\Encrypter($customKey, Config::get('app.cipher')); 
    return $newEncrypter->encrypt($vWord); 
} 

function customDecrypt($vWord){ 
    $customKey = "blabla_key_with_correct_length"; 
    $newEncrypter = new \Illuminate\Encryption\Encrypter($customKey, Config::get('app.cipher')); 
    return $newEncrypter->decrypt($vWord); 
} 

:もし$暗号== 'AES-128-CBC' 使用$長=== 16、$暗号== 'AES-256-CBC' 使用$長の場合= == 32)。あなたのアプリが使用する暗号をconfig/app.cipherにチェックインしてください。

0

私はそれが生産DEVを働いていたし、問題が解決された環境からAPP_KEYをコピーしました。それを試してみてください。

関連する問題