android - Android 中的 AES 解密速度慢

标签 android encryption aes

我尝试使用 AES 128 位 key 解密一个 4.2 MB 的 .dcf 文件,但解密需要 33 秒(在函数 cipher.doFinal(data) 上),这正常吗?

这是一个代码 fragment :

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));

最佳答案

您应该尝试在不写入文件的情况下花费时间,即在调用 cipher.doFinal() 之前和之后调用 System.currentTimeMillis() .

话虽这么说,基于 Android 的手机通常使用时钟频率为 500 MHz 或更高的最新 ARM 处理器,而这样的野兽在理论上能够每秒对数兆字节的数据进行 AES 加密或 AES 解密。

但是,Android 代码使用了一个名为Dalvik 的几乎是Java 的虚拟机。 .在 Android-2.2 之前,这是一个解释器(没有 JIT 编译器),这意味着它对于计算密集型任务有点慢。 如果您观察到的平庸性能真的来自 AES 操作本身(而不是文件写入)那么合理的答案是您的 VM 提供了一个 AES 实现,它是用Java 并用 Dalvik 解释。在这种情况下,除了希望出现更好的 VM 实现之外几乎没有其他解决方法(VM 可以使用 AES 的 native 代码实现;此外,对于 Android 2.2 及更高版本,Dalvik 有一个 JIT compiler 应该可以提高代码的性能执行)。

关于android - Android 中的 AES 解密速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663912/

相关文章:

java - android 短信权限棉花糖

ruby-on-rails - 如何在 ruby​​ 中制作加密 PDF 的未加密副本?

Javascript rsa 2048 位客户端加密

javascript - C# .NET AES 与 JavaScript 的互操作性

java - 如何正确运行后台服务?

java - Android 应用程序事件处理

java - 如何使用 Java 或 AWSKmsClient 使用 AWS 加密开发工具包解密 AWS KMS 密码

python - 将语音数据作为字符串记录和写入文件中以进行加密

iphone - 如何解压缩 AES-256 加密的 Zip 文件?

java - 使用 LibGDX SpriteBatches 缩放图像