将加密密钥从Laravel 5.2迁移到5.3

时间:2022-12-28 18:26:40

I'm currently trying to update from Laravel 5.2 to 5.3. But now I have a problem with transforming the encryption from MCrypt to OpenSSL as described in the upgrade guide https://laravel.com/docs/5.3/upgrade#upgrade-5.3.0 here. For this purpose I wrote a command as suggested in the docs above. But there's an error:

我目前正在尝试从Laravel 5.2更新到5.3。但是现在我遇到了将加密从MCrypt转换为OpenSSL的问题,如升级指南https://laravel.com/docs/5.3/upgrade#upgrade-5.3.0中所述。为此,我按照上面的文档中的建议编写了一个命令。但是有一个错误:

[2016-09-18 11:07:46] local.ERROR: exception 'Illuminate\Contracts\Encryption\DecryptException' with message 'The payload is invalid.' in /home/vagrant/Code/bob/vendor/laravel/legacy-encrypter/src/BaseEncrypter.php:44

Command:

<?php
namespace App\Console\Commands;

use App\User;
use Illuminate\Console\Command;
use Laravel\LegacyEncrypter\McryptEncrypter;

class McryptToOpenSSL extends Command
{
/**
 * The name and signature of the console command.
 *
 * @var string
 */
protected $signature = 'key:migrate';

/**
 * The console command description.
 *
 * @var string
 */
protected $description = 'Migrates key from deprecated Mcrypt to OpenSSL.';

/**
 * Create a new command instance.
 *
 * @return void
 */
public function __construct()
{
    parent::__construct();
}

/**
 * Execute the console command.
 *
 * @return mixed
 */
public function handle()
{
    $legacy = new McryptEncrypter(env('APP_KEY_LEGACY'));
    $users  = User::all();
    foreach ($users as $user) {
        $user->password = encrypt(
            $legacy->decrypt($user->password)
        );

        $user->save();
    }
}
}

.env (keys are slightly changed for security reasons)

.env(出于安全原因,密钥略有变化)

APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:3VU8u79ZU0dObazwvd2lHHOAVRJjy5kvzXKeKtcHVYk=
APP_KEY_LEGACY=zejqrdy7WjA58xGoSuj634RYXB97vLyp

1 个解决方案

#1


0  

Are you manually overriding user's password encryption? By default if you don't change anything, you don't need to do that migration of password. password is not using encrypt() to encrypt, it's using password_hash(), and that's the reason payload is not valid.

您是否手动覆盖用户的密码加密?默认情况下,如果您不进行任何更改,则无需进行密码迁移。密码不使用encrypt()加密,它使用password_hash(),这就是有效负载无效的原因。

#1


0  

Are you manually overriding user's password encryption? By default if you don't change anything, you don't need to do that migration of password. password is not using encrypt() to encrypt, it's using password_hash(), and that's the reason payload is not valid.

您是否手动覆盖用户的密码加密?默认情况下,如果您不进行任何更改,则无需进行密码迁移。密码不使用encrypt()加密,它使用password_hash(),这就是有效负载无效的原因。