2015-09-23 34 views
7

Trước đây, Laravel sử dụng mã hóa MCRYPT_RIJNDAEL_128 để mã hóa (trong < 5.0). Bây giờ là AES-256-CBC (> = 5.1). Mcrypt có vẻ là abandonwarewe should not use it.Thay đổi mật mã trong mã hóa Laravel

Tôi có một ứng dụng được viết cho Laravel < 5.1 và được di chuyển sang Laravel 5.1. Tôi có thể thay đổi mật mã, hay nó sẽ phá vỡ mọi thứ?

EDIT:

Nói cách khác, tôi có thể chuyển MCRYPT_RIJNDAEL_128-AES-256-CBC trong một ứng dụng sản xuất Laravel với một cơ sở dữ liệu dân cư, người dùng kết nối, vv mà không gián đoạn dịch vụ/suy thoái hoặc lỗi?

+0

'MCRYPT_RIJNDAEL_128' là AES, vì vậy nó cũng có thể là 'AES-256-CBC'. Bạn có thể cụ thể hơn không? –

+0

Ok, tôi đã cố gắng chính xác hơn (Tôi không biết chính xác mã hóa được Laravel sử dụng ở đâu), hy vọng nó đủ rõ ràng (xin lỗi nếu không) –

Trả lời

3

Có bạn có thể làm như vậy. Chỉ có "được xây dựng trong" tác dụng phụ nên được rằng người dùng của bạn nhận được đăng xuất.

Tôi nói "được tích hợp" vì nếu bạn có thứ gì khác sử dụng khóa mã hóa đó (chạy mã hóa/giải mã trên dữ liệu trong db, mã thông báo api/auth, v.v) thì bạn phải tìm cách di chuyển chúng cũng.

+0

Mật khẩu sẽ hoạt động sau khi thay đổi mật mã? Bởi vì chúng được lưu trữ băm trong cơ sở dữ liệu, và nếu có mật mã encyption mới, nó sẽ cung cấp cho kết quả khác của mật khẩu encypted, do đó old_encypted_password! = New_encypted_password? – user991

+0

Xin lỗi vì câu trả lời trễ nhưng tôi chỉ thấy điều này ... - Có, mật khẩu S work làm việc sau khi thay đổi khóa mã hóa bởi vì mặc định laravel sử dụng các phương thức băm mật khẩu php chuẩn sử dụng bcrypt.Bcrypt một băm không thể giải mã được và nó được chứa trong chuỗi mật khẩu. Bạn được an toàn để thay đổi mật mã mà không ảnh hưởng đến mật khẩu hiện tại của bạn (miễn là bạn không làm điều gì đó bằng tay với mã hóa). –

2

Tôi vừa thử nó trong một ứng dụng đang chạy, và ít nhất nó ném ngoại lệ cho người dùng đã có cookie/phiên và khi bạn đang sử dụng 'mã hóa' => true trong config/sessions.php (được tắt theo mặc định).

ErrorException trong Encrypter.php dòng 101: openssl_decrypt(): IV trôi qua dài 32 byte đó là dài hơn 16 dự kiến ​​bằng mật mã được lựa chọn, cắt xén

Edit: này có thể được cố định bởi chỉnh sửa ứng dụng/Http/Middleware/EncryptCookies.php và thêm chức năng này:

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

Điều này sẽ xóa các cookie không thể giải mã được, vì vậy về cơ bản nó sẽ xóa người dùng.

+0

hey cảm ơn điều này hoàn toàn giúp tôi ngày hôm nay. – nsbucky

0

Nó là hoàn toàn an toàn để thay đổi từ MCRYPT_RIJNDAEL_128 để 'AES-256-CBC'

Làm thế nào tôi thử nghiệm nó?

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 

Vì vậy, có thể nói rằng việc thay đổi mật mã sẽ không ảnh hưởng đến bạn.

Lưu ý, bạn có thể nhận được "Cảnh báo: Sử dụng hằng số không xác định MCRYPT_RIJNDAEL_128" khi cập nhật lên phiên bản PHP 7.1 hoặc PHP 7.2. Đó là khi tôi thấy rằng tôi cần phải thay đổi mật mã.

Các vấn đề liên quan