当前位置: 首页 > 编程语言 > C#

使用BouncyCastleAesFastEngine加密C#AesCryptoServiceProvider加密数据分享

时间:2023-04-10 20:53:19 C#

使用BouncyCastleAesFastEngine加密C#AesCryptoServiceProvider加密数据我需要使用标准C#AesCryptoServiceProvider解密数据,使用BouncyCastleAesFastEngine在Java端加密。(使用BouncaCastle的c#实现解密数据没有问题)有没有办法做到这一点?我没有找到在BouncyCastle实现中使用的IV...有吗?任何帮助都会很棒!Marcus编辑:以下代码用于初始化AesFastEngine:BlockCiphercoder=newAESFastEngine();CFBBlockCiphercfbCipher=newCFBBlockCipher(coder,8);StreamCipherstreamCipher=newStreamBlockCipher(cfbCipher);streamCipher.Init(true,keyParameteripher);streamCipher.ProcessBytes(data,0,data.Length,encodedMessageBytes,0);编辑:您好Grec,感谢您的回答,但它仍然不起作用......我有一个示例解决方案,可以在此处下载。如果您同时单击两个按钮,您会得到一个不同的加密数组...???解密使用bouncycastle生成的数组会导致异常,指出加密数据的长度无效...这是我为解密编写的代码:AesManagedAlg=newAesManaged();AesManagedAlg.Mode=CipherMode.CBC;AesManagedAlg.FeedbackSize=8;AesManagedAlg.Key=键;//使用测试AesManagedAlg.IV=newbyte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//创建一个解密器来执行流转换。ICryptoTransform解密器=AesManagedAlg.CreateDecryptor(AesManagedAlg.Key,AesManagedAlg.IV);//创建用于解密的流。msDecrypt=newMemoryStream(cipherText);csDecrypt=newCryptoStream(msDecrypt,decryptor,CryptoStreamMode.Read);//从解密流中读取解密字节vardecryptedData=newList();varbuffer=newbyte[1];while(true){varreadBytes=csDecrypt.Read(buffer,0,buffer.Length);如果(readedBytes==0)中断;decryptedData.Add(缓冲区[0]);}ret=decryptedData.ToArray();编辑:越来越近了!RijndaelManaged托管正在运行,但它提供了我的一个字节的加密数据所有其他字节都是相同的......我尝试了很多但我不知道如何获得充气城堡的最后一个字节......没有最后一个字节就不可能解密数据RijndaelManaged...你使用的IV是默认IV,全为零。您应该能够在.NET中执行此操作,方法是创建一个AesManaged对象,将模式设置为CipherMode.CFB并将FeedbackSize设置为8。然后使用CreateEncryptor方法创建ICryptoTransform,该方法又用于创建CryptoStream。这个例子应该有助于最后几个步骤。编辑:查看您发布的新代码,第二行是错误的。您需要指定CFB模式,而不是CBC。第二行应该是AesManagedAlg.Mode=CipherMode.CFB;此外,看起来您正在解密readBytes字节的数据,但只将buffer[0]添加到明文中而忽略其余部分。编辑2:如上所述,AesManaged不能在CFB模式下使用,但RijndaelManaged可以。请注意,AES算法只是限制为128位的块大小和128、192或256位的密钥大小的Rijndael算法。有关示例,请参阅我对类似问题的回答。以上就是C#学习教程:使用BouncyCastleAesFastEngine加密C#AesCryptoServiceProvider加密数据分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: