当前位置: 首页 > 知识库问答 >
问题:

Bouncy Castle在C#中不解密Java中的DoFinal

盖博简
2023-03-14

我正在尝试解密使用Java中的Bouncy Castle库和C#加密的数据。用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));
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));

共有1个答案

杜哲彦
2023-03-14

原来,提供给加密和解密的数据是以不同的格式编码的。我正在引入UTF-8编码的字符串进行解密,首先需要将它们变成Base64字符串。谢谢你提供的所有帮助。

 类似资料:
  • 当我第一次开始构建加密过程时,我被告知使用AES256和PKCS7Padding。经过一番唠叨,我得到了一个服务器代码的C++示例。原来IV是256位,所以我不得不使用RijndaelEngine代替。此外,为了使其正常工作,我必须使用zerobytepadding。 下面是我的代码: 下面是我用来发送和接收消息的一个测试函数: 或者我在错误之前的最后一行看起来如下所示: 如果我将加密/解密设置为

  • 我一直在尝试使用BouncyCastle库来进行PGP加密/解密。我有一些代码需要修改,以便只使用流-不使用文件。 我尝试移除pgputilities.writeFileToliteralData(),然后让它返回一个流,但没有成功(输出流为空)。 这里更明确的是方法应该是什么: 下面是我需要修改的代码:

  • 我目前正在将我的C#AES-GCM密码代码转换为PHP。然而,经过一些研究,我的PHP系统加密的文本不能被C#one解密。我想知道这两种代码是否有区别: C#带弹跳壳: 下面是PHP系统: 有没有人能告诉我,PHP代码中是否有遗漏或不同之处,导致它们的工作方式有所不同?或者PHP函数和BouncyCastle函数之间是否存在某种内部差异,从而使它们有所不同?

  • 我试图解密和验证一个加密的文件,但得到一个异常java。伊奥。EOFEException:执行完整性检查时,PartialInputStream中的流过早结束。数据被正确解密,签名被检查。 异常发生在pbe中。验证()。 有人知道为什么会发生这种情况,以及如何解决它吗? 我在1.51版上使用JDK15。 代码如下: 完整的堆栈跟踪:

  • 我生成一个不对称密码密钥对,如下所示: 我的意图是提取公钥和私钥,然后在以后重建密钥。我首先提取了如下密钥: 如何重新创建公钥和私钥参数以便使用它们?在本例中,我确实重新创建了私钥,然后对数据字节数组进行签名。 虽然它感觉像一个真正的黑客,但它工作得很好。如何使用公钥执行此操作?我将变量xxx设置为(ECPublicKeyParameters)aKeyPair。Public和我可以使用下面的代码验