Android Cipher解码数据

时间:2013-01-31 09:48:46

标签: android cryptography encryption

我需要解密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());

1 个答案:

答案 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();