在Laravel中临时切换应用程序密钥,并将其用于字符串的加密/解密
我想使用Laravel的8 Lightning\Support\Facades\Crypt,但使用不同的密钥。是否有可用于此目的的软件包,或者可以这样做?我尝试了加密邮件,然后更改了密钥和旧密钥:在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
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…”);
解密你的有效载荷