当前位置: 首页 > 面试题库 >

Android上的慢速图像加密/解密

沈永贞
2023-03-14
问题内容

我尝试使用AES 128位密钥解密4.2 MB .dcf文件,但是解密(在cipher.doFinal(data)函数上)花费了33秒,这是否正常?

这是一个代码片段:

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

问题答案:

您应该尝试计算不写入文件所花费的时间,即,在调用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编译器,可以提高代码执行性能)。



 类似资料:
  • 我试图创建一个Android应用程序,它可以动态加密数据并将其写入存储。已经实现了没有加密的应用程序,在stackoverflow上查看了100个加密示例/帖子,但无法决定使用哪种方法。 一开始想到使用AES,就在谷歌上搜索它的安全性。每次输入16或32个字符(我希望安全性更好)的密码似乎并不方便。作为一种替代的非对称加密方式,人们想到了。用一个密钥加密,用另一个密钥解密,这样我就可以将用于加密的

  • 问题内容: 结合我的另一个问题,并在更改了这部分代码之后 从解密部分,我遇到了另一个错误,这是 当我单击SheepTest.png时,文件为空。错误在哪里?谁能帮助我解决错误?谢谢。 问题答案: 我猜想这行返回null: 文档说明: “如果没有注册的ImageReader声称能够读取结果流,则返回null。” 空值将传递给此调用,从而导致NPE: 我不熟悉此API,但是从文档和此处看到的内容中,我

  • 最近,由于系统升级,我们将应用程序移植到Android L版本5.0.2。我的应用程序不能播放像720p@60fps和1080p@60fps这样的高分辨率视频。 同样,这是我关于stackoverflow的问题,请原谅我关于错误的代码格式和直接引用的问题。

  • 客户端(4.2.1)应用程序通过请求向(5.6)API发送公钥。此API使用符合的加密数据,然后使用OpenSSL public encryption和的客户端公钥加密AES加密的密钥。它将通过编码的数据发送回客户端android应用程序,客户端android应用程序将加密数据。我已经设置了一个基本的PHP测试脚本来测试整个过程,这是预期的工作。 目前,我正在客户端Android应用程序中实现解密

  • 如何使用Pycrypto python库加密图像?我在互联网上找到了一些文本加密的例子,但在图像上找不到同样的例子。有人能帮我吗?