Android AES-128 文件加密/解密非常慢。我怎样才能提高速度

2024-02-28

我正在开发一个 Android 应用程序,可以保护图像和视频,例如 and 。我正在尝试使用 AES-128 加密/解密技术来存储图像和视频。我尝试了 3 张尺寸分别为 5.13、4.76 和 5.31 的样本图像。但加密耗时分别为25s、22s、27s,解密耗时分别为31s、30s、34s。我正在 HTC One X 上进行测试。

这样的速度对于我的应用程序来说是不可行的,因为用户将不间断地快速滚动和查看图像。您能否建议我如何提高性能(速度)或者我应该切换到其他算法?您能否建议我任何其他技术,通过这些技术我可以快速加密/解密图像和视频而不会对安全性造成太大影响。

I tried and ,而且他们的速度非常快。据说 Vaulty 使用 AES-256,但它在加密和查看图像方面仍然非常快速且响应灵敏。使用 AES-256,vaulty 怎么可能这么快?

我正在使用的代码是:

 static void encrypt(String filename) throws IOException, NoSuchAlgorithmException,
        NoSuchPaddingException, InvalidKeyException {

    // Here you read the cleartext.
    File extStore = Environment.getExternalStorageDirectory();
    startTime = System.currentTimeMillis();
    Log.i("Encryption Started",extStore + "/5mbtest/"+filename);
    FileInputStream fis = new FileInputStream(extStore + "/5mbtest/"+filename);
    // This stream write the encrypted text. This stream will be wrapped by
    // another stream.



    FileOutputStream fos = new FileOutputStream(extStore + "/5mbtest/"+filename+".aes", false);

    // Length is 16 byte
    SecretKeySpec sks = new SecretKeySpec("MyDifficultPassw".getBytes(),
            "AES");
    // Create cipher
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
    cipher.init(Cipher.ENCRYPT_MODE, sks);
    // Wrap the output stream
    CipherOutputStream cos = new CipherOutputStream(fos, cipher);
    // Write bytes
    int b;
    byte[] d = new byte[8];
    while ((b = fis.read(d)) != -1) {
        cos.write(d, 0, b);
    }
    // Flush and close streams.
    cos.flush();
    cos.close();
    fis.close();
    stopTime = System.currentTimeMillis();
    Log.i("Encryption Ended",extStore + "/5mbtest/"+filename+".aes");
    Log.i("Time Elapsed", ((stopTime - startTime)/1000.0)+"");
}

static void decrypt(String filename) throws IOException, NoSuchAlgorithmException,
        NoSuchPaddingException, InvalidKeyException {
    File extStore = Environment.getExternalStorageDirectory();
    Log.i("Decryption Started",extStore + "/5mbtest/"+filename+".aes");
    FileInputStream fis = new FileInputStream(extStore + "/5mbtest/"+filename+".aes");

    FileOutputStream fos = new FileOutputStream(extStore + "/5mbtest/"+"decrypted"+filename,false);
    SecretKeySpec sks = new SecretKeySpec("MyDifficultPassw".getBytes(),
            "AES");
    // Create cipher
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
    cipher.init(Cipher.DECRYPT_MODE, sks);
    startTime = System.currentTimeMillis();
    CipherInputStream cis = new CipherInputStream(fis, cipher);
    int b;
    byte[] d = new byte[8];
    while ((b = cis.read(d)) != -1) {
        fos.write(d, 0, b);
    }

    stopTime = System.currentTimeMillis();

    Log.i("Decryption Ended",extStore + "/5mbtest/"+"decrypted"+filename);
    Log.i("Time Elapsed", ((stopTime - startTime)/1000.0)+"");

    fos.flush();
    fos.close();
    cis.close();
}

导致代码运行缓慢的一件事是缓冲区的大小:

byte[] d = new byte[8];

如果您希望它运行得更快,您应该将其提高几个数量级。考虑到文件的大小,我建议至少使用 1 MB,但现在您实际上可以将其设置为几 MB,即使在 Android 上也是如此。尝试将其更改为:

byte[] d = new byte[1024 * 1024];

并让我们知道这提高了多少速度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android AES-128 文件加密/解密非常慢。我怎样才能提高速度 的相关文章

随机推荐

  • Codeigniter - 提交后验证失败时重新填充表单

    我有一个表单 要求用户输入一些信息 如果他们未能填写必填字段 他们将被重新提交表格 页面顶部通知他们需要哪些字段 并且我启用了粘性表单 set value 这样他们的输入就不会丢失 我使用 flashdata 向用户显示消息 即 如果他们输
  • 从 listWidget 中删除选定的项目

    如何从列表中删除选定的项目QListWidget 我尝试编写以下代码 但它不起作用 QList
  • 使用 Moya 获取响应标头

    我在我的 swift 应用程序中使用 Moya 来处理网络请求 我能够使用 Moya Object Mapper 获取请求并映射结果 我之前使用过 alamofire 熟悉如何发布 获取请求和读取响应头 然而 我似乎不明白如何在 Moya
  • Ag-grid 捆绑包尺寸太大

    我正在使用 Angular 6 开发一个 Web 应用程序 我有一个 Ag grid 企业版 Ag grid 文档说 我们必须导入所有农业网格角 农业网格社区 and 农业电网企业与农网企业合作 编译后 主包总大小超过 1 5 MB 在那里
  • Firebase 函数问题以及 .add() 与 .doc().set() 之间的区别

    几周以来我遇到了以下问题 以前不是问题 1 添加 数据 const saveNewDoc functions https onCall data NewDocWrite context CallableContext gt return a
  • 两个类之间的递归java泛型

    这是一个类似于中提出的问题两个类之间可能递归的 Java 泛型 https stackoverflow com questions 5929689 possibly recursive java generics between two c
  • 从派生类初始化列表调用基类构造函数的顺序

    struct B int b1 b2 B int int struct D B int d1 d2 which is technically better D int i int j int k int l B i j d1 k d2 l
  • AttributeError:“模块”对象没有属性“get_frontal_face_ detector”

    我试图使用 python 的 dlib 库来检测面部标志 我正在使用上面给出的例子人脸检测器 http dlib net face landmark detection py html 我在安装dlib之前已经安装了所有依赖项 首先 我使用
  • Joomla 2.5创建组件并保存数据

    我一直在使用这个文档 我在网上可以找到的唯一文档 来构建一个组件 http docs joomla org Developing a Model View Controller Component 2 5 Introduction http
  • 为什么 awk 似乎随机化数组?

    如果你看一下这个的输出awk测试一下 你会看到array in awk似乎是按某种随机图案打印的 对于相同数量的输入 它似乎具有相同的顺序 为什么会这样呢 echo one two three four five six awk for i
  • Windows 服务中线程内的计时器

    我不知道如何以最佳方式解决这个问题 现在我有一个 Windows 服务 其唯一任务是从具有特定 DSN 的数据库收集数据 然后在数据有效时发送电子邮件 该服务包含一个计时器 每 5 分钟滴答一次并执行上述任务 现在我需要重新编写Window
  • 如何在 d3 javascript 中为 SVG 文本元素分配唯一 id

    在 d3 中制作条形图 我有 30 多个条形图 x 轴上有 30 多个相应标签 我希望在页面加载时隐藏 x 轴标签 这是有效的 并且仅当用户将光标悬停在相应的栏 svg 矩形对象 上时才出现 为此 我为每个矩形和每个文本元素分配一个 id
  • 使用最小起订量的扩展方法的单元测试

    我正在为 azuresearch 的函数 uploaddocuments 编写单元测试 Unsupported expression gt Index It IsAny
  • 在 Perl 中获取堆栈跟踪? [复制]

    这个问题在这里已经有答案了 如何在 Perl 中获取堆栈跟踪 对于调试需要 我喜欢鲤鱼 永远 http search cpan org dist Carp Always perl MCarp Always my script pl
  • 有没有办法在不执行脚本的情况下测试 PowerShell 脚本中的函数?

    我想定义独立的我的 PowerShell 脚本中的函数 并且能够在不执行脚本其余部分的情况下对函数进行 Pester 测试 有什么办法可以做到这一点而不需要在单独的文件中定义函数吗 在下面的伪代码示例中 如何在不执行 main 功能的情况下
  • 注意:之前的“point_forward”隐式声明在这里

    我似乎无法正确编译这个递归函数 我也不知道为什么 代码如下 void point forward mem ptr m mem ptr temp temp m gt next if temp gt next NULL point forwar
  • 如何检测非活动选项卡并用颜色填充它

    如果选项卡处于非活动状态 如何为我的网站填充颜色 如果用户移动到另一个窗口 我想为我的网站提供类似屏幕保护程序的效果 我可以用 jQuery 做到这一点吗 使用 window onfocus 和 window onblur 方法 请参阅ht
  • Seaborn:标题和副标题位置

    H all 我想创建一个散点图 其中包含与特定变量相对应的标题 副标题 颜色以及与另一个变量相对应的大小 我想显示颜色图例但不显示大小 这是我到目前为止所拥有的 imports import seaborn as sns import ma
  • 有没有模拟Raspberry Pi的Vagrant盒子?

    我正在考虑评估使用 Raspberry Pi 对 ARM 芯片进行编程的工具链 并且我想运行一个模拟 Raspberry 环境的 Vagrant 盒子 有谁知道是否有类似的东西可用 我已经在网上搜索了解决方案 但我可能向谷歌提出了错误的问题
  • Android AES-128 文件加密/解密非常慢。我怎样才能提高速度

    我正在开发一个 Android 应用程序 可以保护图像和视频 例如 and 我正在尝试使用 AES 128 加密 解密技术来存储图像和视频 我尝试了 3 张尺寸分别为 5 13 4 76 和 5 31 的样本图像 但加密耗时分别为25s 2