Android - AES解密失败,内容长度奇怪

时间:2011-09-29 11:49:48

标签: android encryption aes

我正在尝试解码从网络服务获得的AES加密数据。 加密长度为:4256字节 解密长度为:4247字节

Baiscally我认为因为一些填充或其他东西会没问题...... 但。数据实际上可以解密为纯文本。除了最后遗漏了一些角色。

什么可能导致最后丢失的字符?

这是我的解密代码:

public static byte[] decrypt(byte[] input) throws Exception {
    byte[] rawKey = getKey("bla".getBytes());
    SecretKeySpec secretKeySpec = new SecretKeySpec(rawKey, "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
    AlgorithmParameterSpec iv = new IvParameterSpec(new byte[] { 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 });
    cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, iv);
    return cipher.doFinal(input);
}

2 个答案:

答案 0 :(得分:2)

将此作为答案发布,因为评论时间过长:(

问题解决了,从来没有导致错误的解密。解密很好。

实际问题是我,尝试将字符串转换为json对象,而它是json数组。

结合4k字符的logcat限制掩盖了实际的json错误消息并切断了我的调试消息(所以从来没有丢失任何字符)......

答案 1 :(得分:0)

正如Paŭlo所说,问题几乎肯定在填充中。设置一个没有填充的测试decrypt()方法:“AES / CBC / NoPadding”IIRC。解密相同的密文并查看已添加到消息末尾的填充的实际字节数。这应该告诉你实际上正在添加填充(如果有的话)。