更改Laravel加密中的密码

时间:2015-09-23 08:24:02

标签: laravel encryption laravel-5

以前,Laravel使用find密码进行加密(在< 5.0中)。现在它是MCRYPT_RIJNDAEL_128(> = 5.1)。 Mcrypt似乎是abandonwarewe should not use it

我有一个为Laravel< 5.1编写的应用程序并迁移到Laravel 5.1。我可以更改密码,还是会破坏所有内容?

修改

换句话说,我可以在Laravel生产应用程序中使用已填充的数据库,已连接的用户等从AES-256-CBC切换到MCRYPT_RIJNDAEL_128,而不会出现服务中断/降级或错误吗?

3 个答案:

答案 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”。那是在我看到我需要改变密码的时候。