我需要解密6 MB byte []。
Cipher pbeCipher = Cipher.getInstance("AES/CTS/NoPadding");
// Initialize cipher
pbeCipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
doFinal(data);
这个代码在我的Galaxy 2上运行正常,但是当我在只有16mb的堆的HTC图例上运行它时 我得到了OutOfMemory异常。
所以我决定将我的数据拆分成块但可能我做错了,因为这段代码不起作用。你能帮我找一下我做错的事吗?
byte[] result = null;
while (data.length> offset )
{
concatenateByteArrays(result, cipher.update(Arrays.copyOfRange(data, offset, offset+MB)));
offset+=MB;
}
return concatenateByteArrays(result,cipher.doFinal());
答案 0 :(得分:1)
如果数据长度不是MB的倍数,我认为您的代码将忘记处理一段数据。 这个版本正常工作(对不起,如果我的代码不简洁,但我希望很清楚):
int inputLen = cipher.getBlockSize();
int inputOffset = 0;
byte[] output;
ByteArrayOutputStream outputArray = new ByteArrayOutputStream();
while(inputOffset + inputLen < input.length) {
output = cipher.update(input, inputOffset, inputLen);
inputOffset += inputLen;
outputArray.write(output);
}
output = cipher.doFinal(input, inputOffset, input.length - inputOffset);
outputArray.write(output);
byte[] result = outputArray.toByteArray();