gpt4 book ai didi

c# - 使用使用 BouncyCaSTLe AesFastEngine 加密的 C# AesCryptoServiceProvider 加密数据

转载 作者:行者123 更新时间:2023-11-30 18:08:29 27 4
gpt4 key购买 nike

我需要使用标准 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,感谢您的回答,但它仍然无法正常工作...我有一个示例解决方案可供下载 here .

如果你点击这两个按钮,你会得到一个不同的加密数组......???解密用 bouncy caSTLe 生成的数组会导致异常,指出加密数据的长度无效...

这是我写的解密代码:

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 managed 正在运行,但它给了我多一个字节的加密数据。所有其他字节都是相同的...我尝试了很多,但我不知道如何使用充气城堡获取最后一个字节...如果没有最后一个字节,则无法使用 RijndaelManaged 解密数据...

最佳答案

您使用的 IV 是默认 IV,全为零。您应该能够在 .NET 中执行此操作,方法是创建一个 AesManaged 对象,将模式设置为 CipherMode.CFB 并将 FeedbackSize 设置为 8。然后使用 CreateEncryptor 方法创建一个 ICryptoTransform,并依次使用它创建一个 CryptoStreamThis example应该有助于完成最后几个步骤。

编辑:

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

AesManagedAlg.Mode = CipherMode.CFB;

此外,您似乎正在解密 readedBytes 字节的数据,但仅将 buffer[0] 添加到明文中而忽略其余部分。

编辑 2:

如前所述,AesManaged 不能用于 CFB 模式,但 RijndaelManaged 可以。请注意,AES 算法只是限制为 128 位 block 大小和 128、192 或 256 位 key 大小的 Rijndael 算法。参见 my answer以类似的问题为例。

关于c# - 使用使用 BouncyCaSTLe AesFastEngine 加密的 C# AesCryptoServiceProvider 加密数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3142279/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com