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

Android-AES解密失败,内容长度奇怪,android,encryption,aes,Android,Encryption,Aes,我试图解码一个AES加密的数据,我从一个网络服务。 加密长度为:4256字节 解密的长度为:4247字节 我想那没关系,因为有填充物之类的。。。 但是这些数据实际上可以解密为纯文本。除了结尾缺少一些字符 是什么可能导致结尾处缺少字符 下面是我的解密代码: public static byte[] decrypt(byte[] input) throws Exception { byte[] rawKey = getKey("bla".getBytes()); SecretKeyS

我试图解码一个AES加密的数据,我从一个网络服务。 加密长度为:4256字节 解密的长度为:4247字节

我想那没关系,因为有填充物之类的。。。 但是这些数据实际上可以解密为纯文本。除了结尾缺少一些字符

是什么可能导致结尾处缺少字符

下面是我的解密代码:

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);
}

正如帕罗所说,问题几乎肯定在于填充物。设置一个测试
decrypt()
方法,不使用填充:“AES/CBC/NoPadding”IIRC。解密同一个cyphertext,并查看添加到消息末尾的实际填充字节。这将告诉您消息中实际添加了什么填充(如果有)。

将此作为答案发布,因为它太长,无法发表评论:(

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

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


再加上logcat限制的4k字符被屏蔽为实际的json错误消息,并切断我的调试消息(这样就不会丢失任何字符).

您(或Web服务,实际上)是否使用了相同的模式(特别是填充)对于加密?另请注意:具有常量初始化向量的CBC不是安全模式。您希望为每条消息使用新的随机生成的初始化向量(并将其与消息一起传输)。我知道这一点,但不幸的是,我无法访问服务器端代码,这是服务器端使用的配置(.NET)进行加密。它似乎很有效,因为90%的文本被正确解密…面对问题,它不会解密前16或19个字符。你知道为什么吗?你如何克服你的问题在我的情况下内容长度是相同的任何想法?