2015-09-23 8 views
7

पहले, लार्वेल एन्क्रिप्शन के लिए MCRYPT_RIJNDAEL_128 सिफर का उपयोग करता है (< 5.0 में)। अब यह AES-256-CBC (> = 5.1) है। मैक्रिप्ट abandonware और we should not use it प्रतीत होता है।लैरवेल एन्क्रिप्शन में सिफर बदलें

मेरे पास लार्वेल < 5.1 के लिए लिखा गया एक ऐप है और लार्वेल 5.1 में माइग्रेट किया गया है। क्या मैं सिफर बदल सकता हूं, या यह सब कुछ तोड़ देगा?

संपादित करें:

दूसरे शब्दों में, मैं MCRYPT_RIJNDAEL_128 से AES-256-CBC करने के लिए एक Laravel उत्पादन आवेदन पत्र में एक आबादी वाले डेटाबेस के साथ बिना किसी रुकावट के सेवा/गिरावट या बग स्विच कर सकते हैं, जुड़े उपयोगकर्ताओं, आदि?

+0

'MCRYPT_RIJNDAEL_128' एईएस है, इसलिए यह 'एईएस -256-सीबीसी' भी हो सकता है। क्या आप अधिक विशिष्ट हो सकते हैं? –

+0

ठीक है, मैंने अभी और अधिक सटीक होने की कोशिश की है (मुझे नहीं पता कि लैरावेल द्वारा वास्तव में एन्क्रिप्शन का उपयोग किया जाता है), उम्मीद है कि यह अभी स्पष्ट है (माफ करना अगर नहीं) –

उत्तर

3

हाँ आप ऐसा कर सकते हैं। केवल "निर्मित" साइड इफेक्ट होना चाहिए कि आपके उपयोगकर्ता लॉग आउट हो जाएं।

मैं "निर्मित" कहता हूं क्योंकि यदि आपके पास उस एन्क्रिप्शन कुंजी का उपयोग करके कुछ और है (आपके डीबी, एपीआई/ऑथ टोकन इत्यादि में डेटा पर क्रिप्ट/डिक्रिप्ट चलाना) तो आपको यह समझना होगा कि उन्हें माइग्रेट करना है भी।

+0

क्या साइफर बदलने के बाद पासवर्ड काम करेंगे? चूंकि वे डेटाबेस में शेड किए जाते हैं, और यदि नया एन्क्रिप्शन साइफर है, तो क्या यह एन्क्रिप्टेड पासवर्ड का अन्य परिणाम देगा, ताकि पुराना_ेंसीpted_password! = New_encypted_password? – user991

+0

देर से उत्तर के लिए खेद है, लेकिन मैंने इसे देखा है ... - हाँ, पासवर्ड एन्क्रिप्शन कुंजी परिवर्तन के बाद काम करेंगे क्योंकि डिफ़ॉल्ट लार्वेल मानक PHP पासवर्ड हैशिंग विधियों का उपयोग करता है जो bcrypt का उपयोग करते हैं।एक हैश को ब्रिकेट करें जिसे डिक्रिप्ट नहीं किया जा सकता है और यह नमक पासवर्ड स्ट्रिंग के भीतर निहित है। आप अपने मौजूदा पासवर्ड को प्रभावित किए बिना साइफर को बदलने के लिए सुरक्षित हैं (जब तक आपने एन्क्रिप्शन के साथ मैन्युअल रूप से कुछ नहीं किया)। –

2

मैं सिर्फ एक चल आवेदन में यह करने की कोशिश की है, और कम से कम यह उपयोगकर्ताओं के लिए अपवाद पहले से ही कुकी/सत्र है फेंकता है और जब आप उपयोग कर रहे हैं 'एन्क्रिप्ट' => config/sessions.php (जो विकलांग है में सच डिफ़ॉल्ट रूप से)। Encrypter.php लाइन 101 में

ErrorException: openssl_decrypt(): चतुर्थ पारित कर 32 बाइट्स लंबे जो 16 चयनित सिफर से अपेक्षा से अधिक समय है, छोटा

संपादित करें: यह द्वारा निर्धारित किया जा सकता है संपादन एप्लिकेशन/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 से को बदलने के लिए सुरक्षित है 'एईएस 256 सीबीसी'

मैं इसे कैसे परीक्षण किया?

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 का उपयोग" प्राप्त कर सकते हैं। यही वह वक्त था जब मैंने देखा कि मुझे सिफर बदलने की जरूरत है।

संबंधित मुद्दे