我正在使用 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。
1 回答

繁华开满天机
TA贡献1816条经验 获得超4个赞
密钥采用 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从配置数组中检索密钥。
- 1 回答
- 0 关注
- 195 浏览
添加回答
举报
0/150
提交
取消