AES加密中的javax.crypto.IllegalBlockSizeException

时间:2009-05-08 10:30:12

标签: c# java encryption

我在java中使用AES / CBC / PKCS5Padding填充标准,我的朋友在c#.NET中使用PKCS7标准 如果我的朋友使用AES加密数据并将密钥发送给我,那么我可以解密它。

但如果我的数据长度增加超过2920字节,那么如果我加密c#.NET中的数据并解密java中的数据,那么我的解密效果不好。 它给了我以下错误。

“javax.crypto.IllegalBlockSizeException:使用填充密码解密时输入长度必须是16的倍数”

由于 BAPI

2 个答案:

答案 0 :(得分:1)

您再次忘记刷新缓冲区,这意味着数据流不完整。

[编辑]我不知道C#但是在Java中,你必须在所有数据到达后调用doFinal()一次。 (见the docs)。

问题的根源是加密API需要知道你何时完成。它无法从数据中分辨出来,你必须调用一个方法来说“包装它,创建最终的校验和,无论如何,所以接收器可以解码它”。

答案 1 :(得分:0)

只需使用cipher.dofinal("Your byte array","offset...put 0","block size...16");

eg : c.dofinal(ByteArray,0,16);