我有一个非常简单的方法来解密我在Android上使用的消息:
PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(new AESFastEngine()));
cipher.init(false, new ParametersWithIV(new KeyParameter(bookKeyData), iv));
int outputSize = cipher.getOutputSize(data.length);
outBuf = new byte[cipher.getOutputSize(outputSize)];
int processed = cipher.processBytes(data, 0, data.length, outBuf, 0);
if (processed < outputSize) {
processed += cipher.doFinal(outBuf, processed);
}
return Arrays.copyOfRange(outBuf, 0, processed);
我使用的是Spongy Castle 1.54.0.0(在撰写本文时最新版本)。
因为在我们的某些设备上,解密花费的时间比预期的要长,所以我创建了一个测试它的基准测试,我得到了非常奇怪的结果: 运行Android 5.0.1的同一设备平均需要3000毫秒才能解密邮件,使用Android 7.0时平均会有70毫秒。
我对此感到非常惊讶。它是完全相同的设备。通常我会理解在解密时Android 7中可以改进一些东西,但我使用的Spongy Castle库的版本完全相同。
有什么理由可以这样工作吗?
有什么我可以do/port/override
来提高旧版Android上的解密速度吗?
我已尝试将byte[]
解密更改为Stream
,但结果完全相同。