2015-09-23 16 views
7

Daha önce, Laravel şifreleme için MCRYPT_RIJNDAEL_128 şifresini kullanır (< 5.0 sürümünde). Şimdi AES-256-CBC (> = 5.1). Mcrypt, abandonware ve we should not use it olarak görünüyor.Laravel şifrelemesinde şifreyi değiştirin

Laravel < 5.1 için yazılmış bir uygulama var ve Laravel 5.1'e taşındı. Şifreyi değiştirebilir miyim, yoksa her şeyi mi kıracak?

DÜZENLEME: Diğer bir deyişle

, ben hizmet kesintisi/bozulma veya hata olmadan, vb nüfuslu bir veritabanı ile bir laravel üretim uygulamasında AES-256-CBC için MCRYPT_RIJNDAEL_128 den bağlanan kullanıcılar arasında geçiş yapabilirsiniz?

+0

MCRYPT_RIJNDAEL_128' AES, yani AES-256-CBC de olabilir. Daha spesifik olabilir misin? –

+0

Tamam, daha kesin olmaya çalıştım (Tam olarak şifrelemenin Laravel tarafından nerede kullanıldığını bilmiyorum), umarım şu an yeterince açıktır (üzgünüz) –

cevap

3

Evet, bunu yapabilirsiniz. Tek "yerleşik" yan etki, kullanıcılarınızın çıkış yapması gerektiğidir.

"Yerleşik" diyorum çünkü eğer bu şifreleme anahtarını kullanarak başka bir şeyiniz varsa (db, api/auth token'leriniz, verilerinizde crypt/decrypt komutunu çalıştırıyorsanız), bunları nasıl değiştireceğinizi anlamanız gerekir. de. Eğer engelli olan config/sessions.php (içinde 'şifrelemek' => true kullanırken

+0

Şifreler, şifreyi değiştirdikten sonra çalışır mı? Veritabanında saklandıklarından ve yeni bir sıkışma şifresi varsa, şifreli parolanın başka bir sonucunu verecekler, bu yüzden old_encypted_password! = New_encypted_password? – user991

+0

Geç cevap için özür dilerim ama bunu daha yeni gördüm ... - Evet, şifreler şifreleme anahtarı değiştikten sonra çalışacaktır çünkü varsayılan olarak laravel, bcrypt kullanan standart php şifre karma yöntemlerini kullanmaktadır.Şifrelenemeyen bir şifreli Bcrypt ve tuz dizesi içinde bulunur. Şifreyi mevcut şifrelerinizi etkilemeden (şifreleme ile manuel olarak bir şey yapmadığınız sürece) değiştirmek güvenlidir. –

2

Sadece çalışan bir uygulama denedim ve en azından zaten Çerezler/Oturumları olan kullanıcılar için İstisnalar atar ve varsayılan olarak). Encrypter.php hattı 101

ErrorException: openssl_decrypt(): Bu sabitlenebilir: IV geçirilen

düzenleme kesilmesi, daha seçilen şifre beklenen 16'dan olan 32 bayt uzunluğunda düzenleme uygulaması/HTTP/Katman/EncryptCookies.php ve bu işlevi ekleyin:

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; 
} 

Bu deşifre edilemeyen çerezleri kaldırıyoruz, böylece temelde kullanıcının oturumunu kapatır.

+0

hey teşekkürler bu beni bugün kurtardı. – nsbucky

0

O için MCRYPT_RIJNDAEL_128 değiştirmek için tamamen güvenlidir 'AES-256-CBC'

Test ettim nasıl?

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 

Bu nedenle, değişen şifrenin sizi etkilemeyeceğini söylemek güvenlidir.

Not: PHP 7.1 veya PHP 7.2 sürümüne güncellerken "Uyarı: tanımsız sabit MCRYPT_RIJNDAEL_128 kullanımı" alabilirsiniz. O zaman şifreyi değiştirmem gerektiğini gördüm.