使用BouncyCastle AesFastEngine加密C#AesCryptoServiceProvider加密数据

我需要使用标准C#AesCryptoServiceProvider解密数据,该数据在Java端使用Bouncy Castle AesFastEngine加密。 (使用Bounca Castle的c#实现解密数据没问题)

有没有办法做到这一点?

我没有找到在Bouncy Castle实施中使用的IV ……有没有?

任何帮助都会很好! 马库斯

编辑:

以下代码用于初始化AesFastEngine:

BlockCipher coder = new AESFastEngine(); CFBBlockCipher cfbCipher = new CFBBlockCipher(coder, 8); StreamCipher streamCipher = new StreamBlockCipher(cfbCipher); streamCipher.Init(true, keyParameter); streamCipher.ProcessBytes(data, 0, data.Length, encodedMessageBytes, 0); 

编辑:

您好Grec,感谢您的回答,但它仍然无效……我有一个示例解决方案可以在这里下载。

如果你单击两个按钮,你会得到一个不同的加密数组…… ??? 解密使用充气城堡生成的arrays导致一个例外,说加密数据的长度无效……

这是我为解密编写的代码:

 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(); 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,全部为零。 您应该可以通过创建AesManaged对象,将模式设置为CipherMode.CFB并将FeedbackSize设置为8来在.NET中执行此操作。然后使用CreateEncryptor方法创建ICryptoTransform ,并依次使用它来创建CryptoStream 。 此示例应该有助于完成最后几个步骤。

编辑:

查看您发布的新代码,第二行是错误的。 您需要指定CFB模式, 而不是 CBC 。 第二行应该是

 AesManagedAlg.Mode = CipherMode.CFB; 

此外,看起来您正在解密readedBytes字节数据,但只将buffer[0]添加到明文而忽略其余部分。

编辑2:

如上所述, AesManaged不能用于CFB模式,但RijndaelManaged可以。 请注意,AES算法只是限制在128位块大小和128,192或256位密钥大小的Rijndael算法。 有关示例,请参阅我对类似问题的回答 。