2015-09-23 70 views
7

これまでは、LaravelはMCRYPT_RIJNDAEL_128暗号化(<)の暗号を使用していました。今はAES-256-CBC(> = 5.1)です。 Mcryptはabandonwarewe should not use itのようです。Laravel暗号化の暗号を変更します。

私はLaravel < 5.1用に書かれたアプリを持っていて、Laravel 5.1に移行しました。暗号を変更することはできますか、それともすべてを破ることはできますか?

EDIT:すなわち

、私はサービスの中断/分解またはバグなし人口データベース、接続ユーザ、等とLaravel生産アプリケーションでMCRYPT_RIJNDAEL_128からAES-256-CBCに切り替えることができますか?

+0

「MCRYPT_RIJNDAEL_128」はAESなので、「AES-256-CBC」でもかまいません。あなたはもっと具体的になりますか? –

+0

私はちょうどもっと正確にしようとしました(暗号化がLaravelによってどこで使用されているのかわかりません)、十分にはっきりしていることを願っています(申し訳ありません) –

答えて

3

はい、可能です。唯一の「組み込み」の副作用は、ユーザーがログアウトすることです。

私は、暗号化キー(db、api/authトークンなどのデータに対してcrypt/decryptを実行する)を使用しているものがある場合、それらを移行する方法を理解する必要があるため同じように。

+0

暗号を変更した後でパスワードは機能しますか?それらはデータベースにハッシュされて格納されているので、新しい暗号化の暗号があれば、暗号化されたパスワードの他の結果が得られますので、old_encypted_pa​​ssword!= new_encypted_pa​​ssword? – user991

+0

遅くて申し訳ありませんが、これを見ました... - はい、パスワードは暗号鍵の変更後に動作します。デフォルトでは、laravelはbcryptを使用する標準のphpパスワードハッシュ方式を使用するためです。解読できないハッシュをBcryptし、その塩はパスワード文字列に含まれています。既存のパスワードに影響を与えずに暗号を変更することは安全です(暗号で手動で何かをしなかった限り)。 –

2

私は実行中のアプリケーションでそれを試みたが、少なくともそれはすでにクッキー/セッションを持っていて、無効あるのconfig/sessions.php(で「暗号化」=>真を使用している場合に、ユーザーのために例外をスローしますデフォルトで)。 openssl_decrypt():Encrypter.phpライン101に

ErrorException これにより固定することができる:IVが経過は

編集を切り捨て、もう選択された暗号が期待16よりも長い32バイトであります編集アプリ/ HTTP /ミドルウェア/ EncryptCookies.phpと、この機能を追加します。

protected function decrypt(Request $request) 
{ 
    foreach ($request->cookies as $key => $c) { 
     if ($this->isDisabled($key)) { 
      continue; 
     } 

     try { 
      $request->cookies->set($key, $this->decryptCookie($c)); 
     } catch (\Illuminate\Contracts\Encryption\DecryptException $e) { 
      $request->cookies->set($key, null); 
     } catch (\ErrorException $e) { 
      $request->cookies->set($key, null); 
     } 
    } 

    return $request; 
} 

これは、復号化することができないのクッキーを削除しますので、基本的にそれはユーザをログアウト。

+0

ねえ、これは今日私を完全に救ってくれてありがとう。 – nsbucky

0

私がそれをテストする方法MCRYPT_RIJNDAEL_128に 'AES-256-CBC'

から変更することは全く安全ですか?

First I encrypted text with MCRYPT_RIJNDAEL_128 
After that, I changed cipher to 'AES-256-CBC' in config/app.php 
Third I decrypted encrypted string from the first step 

I also tested that logged in users stay logged after cipher change 

したがって、暗号を変更しても影響はありません。

注意:PHP 7.1またはPHP 7.2バージョンに更新するときは、警告:定義されていない定数MCRYPT_RIJNDAEL_128を使用することができます。それが私が暗号を変更する必要があることを見たときです。