未正确解密Azure Fashion App RabbitMQTrigger AES加密消息,有效负载似乎不是Base64字符串

2nbm6dog  于 7个月前  发布在  RabbitMQ
关注(0)|答案(1)|浏览(57)

抱歉,但我对解密AES消息和RabbitMQ很陌生。
我有一个Azure函数应用程序,带有以下RabbitMQ触发器:
代码:

[FunctionName("RabbitMQTriggerTest")]       
public async Task Run([RabbitMQTrigger("event-vendor-create", ConnectionStringSetting = "RabbitMQConnection")] string item
  ,[DurableClient] IDurableOrchestrationClient starter,ILogger log)
{           
    string decryptedText = AesDecryptHelper.DecryptAes(item, _options.RabbitMQAesKey);
    log.LogInformation($"Decrypted Text: {decryptedText}");
}

字符串
rabbitMQ服务器和队列是我们外部的东西,我们只有监听权限,我使用以下格式连接到它:
RabbitMQConnection:amqps://user:pass@hostName/vhost”
在函数应用程序内的触发器被触发,并给我以下类型的消息,首先似乎不是base64或编码正确的结束,一旦我收到它:

�5H�����c�5
�5By��S�(��gq�� �9���>���&���f�H��7��%���n���)ח���c{������8��


我有一个名为AesDecryptHelper的静态帮助器类,其中我在名为DecryptAes的触发器函数中调用方法。
代码:

public static string DecryptAes(string encryptedText, string aesKey)
{
    string decryptedJson = null;

    // Convert the AES key to bytes
    byte[] keyBytes = Convert.FromBase64String(aesKey);

    // Convert the input Base64 encoded string to bytes
    byte[] encryptedBytes = Convert.FromBase64String(encryptedText);

    // Create an AES decryptor
    using (AesManaged aesAlg = new AesManaged())
    {
        aesAlg.Key = keyBytes;
        aesAlg.Mode = CipherMode.CBC;
        aesAlg.Padding = PaddingMode.PKCS7;

        // Assume the IV (Initialization Vector) is prepended to the encrypted data
        int ivSize = aesAlg.BlockSize / 8;
        byte[] iv = new byte[ivSize];
        Array.Copy(encryptedBytes, 0, iv, 0, ivSize);
        aesAlg.IV = iv;

        // Create a decryptor to perform the stream transform
        using (ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV))
        {
            // Create the streams used for decryption
            using (MemoryStream msDecrypt = new MemoryStream(encryptedBytes, ivSize, encryptedBytes.Length - ivSize))
            {
                using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                    {
                        // Read the decrypted bytes from the decrypting stream and deserialize the JSON
                        decryptedJson = srDecrypt.ReadToEnd();
                    }
                }
            }
        }
    }

    return decryptedJson;
}


但是,一旦它到达下面的行,它就会出错:

byte[] encryptedBytes = Convert.FromBase64String(encryptedText);
System.Private.CoreLib: Exception while executing function: RabbitMQTriggerTest. System.Private.CoreLib: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.

的字符串
我试过将它转换为UTF8,然后转换为Base 64,这似乎可以工作,但是:

var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(encryptedText);
encryptedText =  System.Convert.ToBase64String(plainTextBytes);
byte[] encryptedBytes = Convert.FromBase64String(encryptedText);


但是一旦我尝试在StreamReader中解码它:

decryptedJson = srDecrypt.ReadToEnd();


我得到以下结果:

System.Private.CoreLib: Exception while executing function: RabbitMQTriggerTest. System.Security.Cryptography.Algorithms: The input data is not a complete block.


同样,我对这一点很陌生,我不确定我是否遇到了问题,因为从队列中接收的初始项格式不正确,或者我需要将其转换为特定的编码类型,因为我试图解密它。
如有任何帮助,我们将不胜感激。

kx7yvsdv

kx7yvsdv1#

下面的代码使用RabbitMQ触发器侦听消息,然后使用AES加密解密它们。

  • 它从RabbitMQ队列中检索加密的消息,使用AES加密解密消息并记录它们。
  • 我遵循了Azure Functions的RabbitMQ触发器MSDOC
public static class Function
{
    [FunctionName("RabbitMQTriggerTest")]
    public static void Run(
        [RabbitMQTrigger("azures", ConnectionStringSetting = "sampath")] string encryptedMessage,
        [DurableClient] IDurableOrchestrationClient starter,
        ILogger log)
    {
        log.LogInformation($"C# RabbitMQ trigger function processed message: {encryptedMessage}");

       

        // Decrypt the message
        string decryptedMessage = DecryptAes(encryptedMessage, encryptionKey);
        log.LogInformation($"Decrypted Text: {decryptedMessage}");
    }

个字符

输出:

相关问题