laravel - Laravel 中的临时切换应用程序密钥并将其用于字符串的加密/解密
问题描述
我想使用 Laravel 的 8 Illuminate\Support\Facades\Crypt 但使用不同的密钥。是否有可用的软件包或可以完成?我尝试了加密消息,然后更改密钥和旧密钥:
config(['app.key' => 'base64:aesKxxmSf0Vtqyuf2s1QK/7zuhu3dB+w+....']);
前
Crypt::decryptString("eyJpdiI6IitxMVhrU2RBV0VLbSt3UjRzN0xabkE9PSIsInZhbHVlIjoiaDBtWUtiUzc0QVRQdXoyM2ZCeVAyZz09IiwibWFjIjoiYTQwYzdkNzgwODAzNGVlYjM2NDZiM2Y4M2NhYTA2ZjE2NjFhZjFiNTYwN2U1NzVhNWVlZDM...");
但这并没有触发临时密钥更改,因为我收到了这个错误:
Illuminate\Contracts\Encryption\DecryptException
The MAC is invalid.
当我将其改回旧密钥时,一切正常。
所以我猜密钥已经在内存中用于Crypt::decryptString。
你有什么想法?
解决方案
Laravel 在引导期间将加密器注册为单例Illuminate\Encryption\EncryptionServiceProvider
,因此一旦服务提供者运行,更改应用程序密钥就不会做任何事情。
您最好的选择可能是创建自己的 Encrypter 实例,如下所示:
$encrypter = new Illuminate\Encryption\Encrypter(base64_decode($appKey), config('app.cipher'))
where$appKey
是您希望用于解码的密钥,不带前缀base64:
。
然后你可以打电话
$encrypter->decryptString("eyJpdiI6IitxMVhrU2RBV0VLbSt3UjRzN0xabkE9PSIsInZhbHVlIjoiaDBtWUtiUzc0QVRQdXoyM2ZCeVAyZz09IiwibWFjIjoiYTQwYzdkNzgwODAzNGVlYjM2NDZiM2Y4M2NhYTA2ZjE2NjFhZjFiNTYwN2U1NzVhNWVlZDM...");
解密您的有效载荷。
推荐阅读
- amazon-web-services - 我的 AWS Application Load Balancer 如何获得比请求更多的 503?
- javascript - 动态添加幻灯片到 Reveal.js 幻灯片
- vim - 让 vim 完成 #include 行
- angular - 如何使赛普拉斯别名在测试用例之间工作?
- python - google_new_transError:来自 TTS API 的 429(请求过多)。可能原因:未知,Google Translate API
- python - 提取熊猫系列中的字符串
- ui-automation - 在空手道框架中验证图形/图像?
- azure - 在 Application Insights 中记录详细信息的 Ilog 和 TelemetryClient 之间的区别
- augmented-reality - SparkAR 动态实例化根本不起作用
- ios - Firebase Analytics 架构 x86_64 的未定义符号:“_OBJC_CLASS_$_FIRAnalytics”