抱歉,但我对解密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.
型
同样,我对这一点很陌生,我不确定我是否遇到了问题,因为从队列中接收的初始项格式不正确,或者我需要将其转换为特定的编码类型,因为我试图解密它。
如有任何帮助,我们将不胜感激。
1条答案
按热度按时间kx7yvsdv1#
下面的代码使用RabbitMQ触发器侦听消息,然后使用AES加密解密它们。
个字符
输出: