以前,Laravel使用find
密码进行加密(在< 5.0中)。现在它是MCRYPT_RIJNDAEL_128
(> = 5.1)。 Mcrypt似乎是abandonware和we should not use it。
我有一个为Laravel< 5.1编写的应用程序并迁移到Laravel 5.1。我可以更改密码,还是会破坏所有内容?
修改
换句话说,我可以在Laravel生产应用程序中使用已填充的数据库,已连接的用户等从AES-256-CBC
切换到MCRYPT_RIJNDAEL_128
,而不会出现服务中断/降级或错误吗?
答案 0 :(得分:3)
是的,你可以这样做。唯一的“内置”副作用应该是您的用户退出。
我说“内置”是因为如果你有其他东西使用该加密密钥(对数据库,api / auth令牌中的数据运行crypt / decrypt等),那么你必须弄清楚如何将这些迁移为好。
答案 1 :(得分:2)
我刚刚在正在运行的应用程序中尝试过它,至少它会为已经拥有Cookie /会话的用户以及当您使用加密' =>在config / sessions.php中为true(默认情况下禁用)。
Encrypter.php第101行中的ErrorException:openssl_decrypt():传入的IV长度为32个字节,长于所选密码所期望的16个,截断
编辑: 这可以通过编辑app / Http / Middleware / 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;
}
这将删除无法解码的cookie,因此基本上它会将用户注销。
答案 2 :(得分: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”。那是在我看到我需要改变密码的时候。