【问题标题】:Temporary switch app key in Laravel and use it for en/decryption of stringsLaravel 中的临时切换应用程序密钥并将其用于字符串的加密/解密
【发布时间】:2021-01-31 11:00:40
【问题描述】:

我想使用 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 laravel-8 crypt


    【解决方案1】:

    Laravel 在 Illuminate\Encryption\EncryptionServiceProvider 中的引导期间将加密器注册为单例,因此一旦服务提供程序运行,更改应用程序密钥就不会做任何事情。

    您最好的选择可能是像这样创建自己的 Encrypter 实例:

    $encrypter = new Illuminate\Encryption\Encrypter(base64_decode($appKey), config('app.cipher'))
    

    其中$appKey 是您希望用于解码的密钥,没有 base64: 前缀。

    然后你就可以打电话了

    $encrypter->decryptString("eyJpdiI6IitxMVhrU2RBV0VLbSt3UjRzN0xabkE9PSIsInZhbHVlIjoiaDBtWUtiUzc0QVRQdXoyM2ZCeVAyZz09IiwibWFjIjoiYTQwYzdkNzgwODAzNGVlYjM2NDZiM2Y4M2NhYTA2ZjE2NjFhZjFiNTYwN2U1NzVhNWVlZDM...");
    

    解密你的有效载荷。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 2015-11-02
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多