Bouncy Castle 没有在 C# 中从 Java 解密 DoFinal

本文关键字:中从 Java 解密 DoFinal Castle Bouncy | 更新日期: 2023-09-27 18:35:05

我正在尝试使用 C# 解密使用 Java 中的 Bouncy Castle 库加密的数据。在Java中加密的数据(再次使用Bouncy Castle库)可以使用Java解密。我使用相同的键和参数,但是当我到达DoFinal时,出现错误"pad块损坏"。

这是Java:

KeyParameter keyParam = new KeyParameter(key);
CipherParameters param = new ParametersWithIV(keyParam, initVector);
BlockCipherPadding padding = new PKCS7Padding();
BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(new AESEngine()), padding);
cipher.reset();
cipher.init(true, param);
byte[] fileBytes = Base64.decodeBase64(decryptedStringData);
byte[] encrypted = new byte[cipher.getOutputSize(fileBytes.length)];
int l = cipher.processBytes(fileBytes, 0, fileBytes.length, encrypted, 0);
l += cipher.doFinal(encrypted, l);
return (Base64.encodeBase64String(encrypted));

下面是 C#:

KeyParameter keyParam = new KeyParameter(key);
ICipherParameters param = new ParametersWithIV(keyParam, initVector);
IBlockCipherPadding padding = new Pkcs7Padding();
BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CbcBlockCipher(new AesEngine()), padding);
cipher.Reset();
cipher.Init(false, param);
byte[] fileBytes = Convert.FromBase64String(encryptedDataString);
byte[] decrypted = new byte[cipher.GetOutputSize(fileBytes.Length)];
int l = cipher.ProcessBytes(fileBytes, 0, fileBytes.Length, decrypted, 0);
l += cipher.DoFinal(decrypted, l);
return(Convert.ToBase64String(decrypted));

我正在根据已缓冲的哈希为密钥生成一个 32 字节的 PBK......但是,我们检查了 Java 和 C# 之间生成的密钥,它们是相同的。

Bouncy Castle 没有在 C# 中从 Java 解密 DoFinal

事实证明,为加密和解密提供的数据以不同的格式编码。我正在提取 UTF-8 编码的字符串进行解密,需要先将它们制作成 Base64 字符串。感谢您提供的所有帮助。