Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Laravel中临时切换应用程序密钥,并将其用于字符串的加密/解密_Laravel_Laravel 8_Crypt - Fatal编程技术网

在Laravel中临时切换应用程序密钥,并将其用于字符串的加密/解密

在Laravel中临时切换应用程序密钥,并将其用于字符串的加密/解密,laravel,laravel-8,crypt,Laravel,Laravel 8,Crypt,我想使用Laravel的8 Lightning\Support\Facades\Crypt,但使用不同的密钥。是否有可用于此目的的软件包,或者可以这样做?我尝试了加密邮件,然后更改了密钥和旧密钥: config(['app.key' => 'base64:aesKxxmSf0Vtqyuf2s1QK/7zuhu3dB+w+....']); 以前 Crypt::decryptString("eyJpdiI6IitxMVhrU2RBV0VLbSt3UjRzN0xabkE9PSIsIn

我想使用Laravel的8 Lightning\Support\Facades\Crypt,但使用不同的密钥。是否有可用于此目的的软件包,或者可以这样做?我尝试了加密邮件,然后更改了密钥和旧密钥:

config(['app.key' => 'base64:aesKxxmSf0Vtqyuf2s1QK/7zuhu3dB+w+....']);
以前

Crypt::decryptString("eyJpdiI6IitxMVhrU2RBV0VLbSt3UjRzN0xabkE9PSIsInZhbHVlIjoiaDBtWUtiUzc0QVRQdXoyM2ZCeVAyZz09IiwibWFjIjoiYTQwYzdkNzgwODAzNGVlYjM2NDZiM2Y4M2NhYTA2ZjE2NjFhZjFiNTYwN2U1NzVhNWVlZDM...");
但这并没有触发临时密钥更改,因为我遇到了以下错误:

Illuminate\Contracts\Encryption\DecryptException
The MAC is invalid.
当我把它换回旧钥匙时,一切正常

所以我猜密钥已经在内存中,用于Crypt::decryptString


你有什么想法吗?

Laravel在
Illumb\Encryption\EncryptionServiceProvider
的引导过程中将加密机注册为单例,因此,一旦服务提供商运行,更改应用程序密钥不会起任何作用

最好的选择可能是创建自己的加密机实例,如下所示:

$encrypter=new-illumb\Encryption\encrypter(base64_-decode($appKey),config('app.cipher'))
其中,
$appKey
是您希望用于解码的密钥,不带
base64:
前缀

然后你就可以打电话了

$encrypter->decryptString(“EYJPDII6IITXMVHRU2RBV0VLBST3UJRZN0xABKE9PSISINZHBHVLIJIADBTWUTIUZC0QVRQDxOYM2ZCEVAYZ09IIWIBWFJIJOYYTQWYZDKNZGWODAZGVLYJM2NDZIM2Y4M2HYTA2ZJE2NJFHJJJFJFintyWN2 U1NZVHNWVLZDM…”);
解密你的有效载荷