有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我试图用C#解密使用Java中的Bouncy Castle库加密的数据。用Java加密的数据(同样使用Bouncy Castle库)可以用Java解密。我使用相同的键和参数,但当我到达DoFinal时,我得到错误“pad block corrupted”

以下是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#之间生成的密钥,它们是相同的


共 (1) 个答案

  1. # 1 楼答案

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