在 Laravel 中使用不同的密钥解密

我正在使用 Laravel 解密从另一个应用程序(也在 Laravel 中)加密的字符串,但一开始我遇到了问题。

我以这种方式从类中创建了一个新对象\Illuminate\Encryption\Encrypter,以便使用不同的键而不是默认键:

$new_encypter = new \Illuminate\Encryption\Encrypter("base64:ABCDEFGHIJKLF=", config('app.cipher'));

但我有这个错误:

唯一受支持的密码是具有正确密钥长度的 AES-128-CBC 和 AES-256-CBC。

我使用的密钥是有效密钥,因为它来自另一个可以正常工作并使用相同加密配置的 Laravel 应用程序。

传递给构造函数的密码是正确的,因为在异常跟踪中有这行代码:

Illuminate\Encryption\Encrypter::__construct("base64:ABCDEFGHIJKLF=", "AES-256-CBC")

错误在哪里?

我正在使用 Laravel 6。


侃侃无极
浏览 227回答 1
1回答

繁华开满天机

密钥采用 base64 编码并以 . 为前缀base64:。您必须删除前缀并对其进行 base64 解码。这是如何EncryptionServiceProvider做到的:// get the app config$config = $app->make('config')->get('app');// see if the key starts with 'base64:'if (Str::startsWith($key = $this->key($config), 'base64:')) {    // decode the key    $key = base64_decode(substr($key, 7));}return new Encrypter($key, $config['cipher']);$this->key()只是key从配置数组中检索密钥。
打开App,查看更多内容
随时随地看视频慕课网APP