为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
侃侃无极 2022-06-17 16:08:39
我正在使用 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从配置数组中检索密钥。


查看完整回答
反对 回复 2022-06-17
  • 1 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号