Encrypt Data with C# AesCryptoServiceProvider crypted with BouncyCastle AesFastEngine
我需要使用标准C#AesCryptoServiceProvider解密数据,该标准C#已通过Java端Bouncy Castle AesFastEngine加密。 (使用Bounca Castle的c#实现解密数据没有问题)
有没有办法做到这一点?
我找不到在Bouncy Castle实现中使用的IV ...有吗?
任何帮助都很好!
马库斯
编辑:
以下代码用于初始化AesFastEngine:
1 2 3 4 5 |
编辑:
Hello Grec,感谢您的回答,但仍然无法正常工作...
我有一个示例解决方案可在此处下载。
如果您单击两个按钮,您已经获得了一个不同的加密数组... ???
解密由有弹性的城堡产生的数组会导致一个异常,说明加密的数据具有无效的长度...
这是我编写的用于解密的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | AesManagedAlg = new AesManaged(); AesManagedAlg.Mode = CipherMode.CBC; AesManagedAlg.FeedbackSize = 8; AesManagedAlg.Key = key; // Use Test AesManagedAlg.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // Create a decrytor to perform the stream transform. ICryptoTransform decryptor = AesManagedAlg.CreateDecryptor(AesManagedAlg.Key, AesManagedAlg.IV); // Create the streams used for decryption. msDecrypt = new MemoryStream(cipherText); csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read); // Read the decrypted bytes from the decrypting stream var decryptedData = new List<byte>(); var buffer = new byte[1]; while (true) { var readedBytes = csDecrypt.Read(buffer, 0, buffer.Length); if(readedBytes == 0) break; decryptedData.Add(buffer[0]); } ret = decryptedData.ToArray(); |
编辑:
靠近! RijndaelManaged托管正在运行,但是它给了我多一个字节的加密数据。其他所有字节都相同...我尝试了很多,但我不知道如何用充气城堡获取最后一个字节...如果没有最后一个字节,则无法使用RijndaelManaged解密数据...
您使用的IV是默认IV,全零。通过创建
编辑:
查看您发布的新代码,第二行是错误的。您需要指定CFB模式,而不是CBC。第二行应为
1 | AesManagedAlg.Mode = CipherMode.CFB; |
此外,您似乎正在解密
编辑2:
如前所述,