我在我的应用中有一个针对下载文件的加密/解密机制。
这个机制可以在所有安卓设备和Android 5.0-lollipop之前的版本上运行。
以下是解密的过程:
cipher.init(Cipher.DECRYPT_MODE, key);
fileInputStream = new FileInputStream(file);
cipherInputStream = new CipherInputStream(fileInputStream, cipher);
byte[] fileByte = new byte[(int) file.length()];
int j = cipherInputStream.read(fileByte);
return fileByte;
密钥和密码已经在整个应用程序中生成并使用:
key = new SecretKeySpec(keyValue, "AES");
try {
cipher = Cipher.getInstance("AES");
} catch (Exception e) {
e.printStackTrace();
}
当我在安卓5.0上解密一个文件,文件大小约为200,000字节时,变量j(在返回之前)只有大约8000,远低于200,000,在旧的安卓版本中它恰好等于解密文件长度。
我发现问题出在解密上。因为我可以在安卓5.0上加密一个文件并在旧的安卓版本中解密它,但反过来就不行。但是我会发布加密过程:
cipher.init(Cipher.ENCRYPT_MODE, AESutil.key);
cipherOutputStream = new CipherOutputStream(output, cipher);
byte data[] = new byte[1024];
int count;
while ((count = input.read(data)) != -1) {
cipherOutputStream.write(data, 0, count);
}
预先感谢您
j
为-1
? - Maarten Bodewes