Lor*_*. T 6 encryption android aes
我尝试使用AES 128位密钥解密4.2 MB的.dcf文件,但解密时需要33秒(在函数cipher.doFinal(数据)上),这是正常的吗?
这是一段代码:
long start = System.currentTimeMillis()/1000L;
try {
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivspec);
android.util.Log.d("TEST", "Start decoding...." + String.valueOf(length));
byte[] decrypted = cipher.doFinal(content);
File file2 = new File(Environment.getExternalStorageDirectory().getPath() + "/test.mp3");
OutputStream os = new FileOutputStream(file2);
os.write(decrypted);
} catch (Exception ex) {
ex.printStackTrace();
}
long end = System.currentTimeMillis()/1000L;
android.util.Log.d("TEST","Time "+ String.valueOf(end-start));
Run Code Online (Sandbox Code Playgroud)
您应该尝试在不写入文件的情况下测试所花费的时间,System.currentTimeMillis()即在调用cipher.doFinal().
话虽如此,基于 Android 的手机通常使用主频为 500 MHz 或更高的最新 ARM 处理器,理论上,这样的野兽每秒能够对数兆字节的数据进行 AES 加密或 AES 解密。
然而,Android 代码使用称为Dalvik的几乎 Java 虚拟机。在 Android-2.2 之前,这是一个解释器(没有 JIT 编译器),这意味着它对于计算密集型任务来说有点慢。如果您观察到的平庸性能确实来自 AES 操作本身(而不是文件写入),那么合理的答案是您的 VM 提供了一个用 Java 编写并用 Dalvik 解释的 AES 实现。在这种情况下,除了希望存在更好的 VM 实现(VM 可以使用 AES 的本机代码实现;此外,在 Android 2.2 及更高版本中,Dalvik 有一个JIT 编译器,可以提高代码执行的性能)之外,几乎没有什么解决办法)。
| 归档时间: |
|
| 查看次数: |
5170 次 |
| 最近记录: |