我在java中使用AES / CBC / PKCS5Padding填充标准,我的朋友在c#.NET中使用PKCS7标准 如果我的朋友使用AES加密数据并将密钥发送给我,那么我可以解密它。
但如果我的数据长度增加超过2920字节,那么如果我加密c#.NET中的数据并解密java中的数据,那么我的解密效果不好。 它给了我以下错误。
“javax.crypto.IllegalBlockSizeException:使用填充密码解密时输入长度必须是16的倍数”
由于 BAPI
答案 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);