【发布时间】:2011-09-29 11:49:48
【问题描述】:
我正在尝试解码从 Web 服务获得的 AES 加密数据。 加密长度为:4256字节 解密后长度为:4247字节
Bascally 我认为这会是好的,因为有一些填充或其他东西...... 但。数据实际上可以很好地解密为纯文本。除了最后缺少一些字符。
什么可能导致最后缺少字符?
我的解密代码来了:
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);
}
【问题讨论】:
-
您(或实际上是网络服务)是否使用相同的模式(特别是填充)进行加密?
-
另请注意:具有恒定初始化向量的 CBC 不是安全模式。您想为每条消息使用一个新的随机生成的初始化向量(并与消息一起传输)。
-
我知道,但不幸的是我无权访问服务器端代码,这是用于服务器端 (.NET) 进行加密的配置。而且它似乎有效,因为 90% 的文本都被正确解密了......
-
面临的问题是它不能解密前 16 或 19 个字符,知道为什么吗?在我的情况下,你如何克服你的问题内容长度是一样的任何想法?
标签: android encryption aes