Java大文件AES加密很慢

2023-12-27

我正在尝试使用 AES/CBC 算法加密 512 Mb 文件。大约需要 7 秒,这太长了。如何减少加密时间并使其更快。

我使用固定密钥并尝试使用 CipherOutStream 以及 cipher.update() 而不是 cipher.dofinal()。尽管如此,仍然需要大约 7 秒。

使用以下加密方式加密 512 MB 文件通常需要多少时间。在配备 16 GB 内存和 2 GHz 四核 Intel Core i5 处理器的 Mac 上,我需要 6 秒的时间。我使用 JDK 11 来执行。这是正常现象还是我的代码响应速度慢。我应该担心吗?如何提高加密时间。

package com.encrypterdecrypter;

import org.apache.commons.io.output.ByteArrayOutputStream;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.io.ClassPathResource;

import javax.crypto.Cipher;
import javax.crypto.CipherOutputStream;
import javax.crypto.spec.SecretKeySpec;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;

@SpringBootApplication
public class DemoApplication {
    private static final String SECRET_KEY = "aesencryptionKey";
    private static final String initVector = "encryptionIntVec";

    public static void main(String[] args) throws Exception {
        SpringApplication.run(DemoApplication.class, args);
        File inputFile = new ClassPathResource("fivetwelvemb.zip").getFile();
        InputStream inputStream = new FileInputStream(inputFile);
        SecretKeySpec secretkey = new SecretKeySpec(SECRET_KEY.getBytes("UTF-8"), "AES");


        long startTime = System.currentTimeMillis();
        OutputStream encryptStream = encryptDecryptBinary(inputStream, Cipher.ENCRYPT_MODE, secretkey);
        long endTime = System.currentTimeMillis();
        System.out.println("Encryption Time in ms : " + (endTime - startTime));

    }

    public static OutputStream encryptDecryptBinary(InputStream inputStream, int encryptMode, SecretKeySpec secretkey) throws Exception {
        Cipher aesCipher = Cipher.getInstance("AES/CBC/NoPadding");
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        aesCipher.init(encryptMode, secretkey);
        OutputStream out =  new ByteArrayOutputStream();
        CipherOutputStream cipherOutputStream = new CipherOutputStream(out, aesCipher);

       /* byte[] encryptedData = aesCipher.doFinal(inputStream.readAllBytes()); */

        byte[] buf = new byte[8192];
        int numRead = 0;
        while ((numRead = inputStream.read(buf)) >= 0) {
            cipherOutputStream.write(buf, 0, numRead);
        }
        cipherOutputStream.close();
        return out;
    }
}
```

None

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

Java大文件AES加密很慢 的相关文章

  • 任务“:app:dexDebug”执行失败

    我目前正在处理我的项目 我决定将我的 Android Studio 更新到新版本 但在我导入项目后 它显示如下错误 Information Gradle tasks app assembleDebug app preBuild UP TO
  • Google 地图查询返回的 JSON 包含像 \x26 这样的编码字符(如何解码?)

    在 Java 应用程序中 我获取 JSON 来自 Google 地图 其中包含以下字符 x26我想将其转换为其原始字符 据我所知 这是一个 UTF 8 表示法 但我不完全确定 在源 JSON 中 可能会出现各种编码字符 例如 x3c div
  • java.lang.Class: 在 java 程序中初始化 log4j 属性文件时出错

    我正在尝试使用 log4j 运行独立的 java 程序 但在调试时收到以下消息 控制台上没有 log4j 相关日志 log Logger 1343 java lang Class ERROR in 18b4aac2 有人可以建议这里出了什么
  • 将链接对象转换为流或集合

    我想迭代堆栈跟踪 堆栈跟踪由可抛出对象组成 其 getCause 返回下一个可抛出对象 最后一次调用 getCause 返回 null 示例 a gt b gt null 我尝试使用 Stream iterable 这会导致 NullPoi
  • 使用 Checkstyle Plugin 时从插件调用代码时出现问题:“org.eclipse.jface”

    我正在尝试在 Rational Software Architect 7 0 0 4 上使用 eclipse cs 插件 我最近卸载了旧的 beta2 版本并安装了 beta3 插件本身按照之前的配置工作 但是每当我尝试通过 Windows
  • 如何解决 onEditCommit 事件上的类型不匹配错误?

    我在 Fxml 中使用 onEditCommit 事件在用户编辑数据后检索数据 FXML 代码
  • Java 重写 hashCode() 得到 StackOverflowError

    所以我不太熟悉重写 hashCode 并且我似乎在 hashCode 方法中以某种方式进行了一些无限递归 这是我的场景 我有一个 DuplicateCache 类 它是一个缓存对象 用于检查系统中的重复对象 我有一个静态内部类 Duplic
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • 服务器到 Firebase HTTP POST 结果为响应消息 200

    使用 Java 代码 向下滚动查看 我使用 FCM 向我的 Android 发送通知消息 当提供正确的服务器密钥令牌时 我收到如下所示的响应消息 之后从 FCM 收到以下响应消息 Response 200 Success Message m
  • 场景生成器删除 fxml 文件中的导入

    我使用场景构建器 Gluon Scene Builder JavaFX Scene Builder 8 1 1 来创建应用程序的 UI 并使用 Eclipse 开发 JavaFX 现在 每次我在场景生成器中保存某些内容时 它都会从 fxml
  • 想要开发像 Facebook 这样的网站 - 处理数百万个请求 - 高性能 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想用 Java 开发一个像 Fac
  • 尝试在没有 GatewayIntent 的情况下访问消息内容

    我希望每当我写一条打招呼的消息时 机器人都会在控制台中响应一条消息 但它只是给我一个错误 JDA MainWS ReadThread WARN JDA Attempting to access message content without
  • 参数动态时如何构建 JPQL 查询?

    我想知道是否有一个好的解决方案来构建基于过滤器的 JPQL 查询 我的查询太 富有表现力 我无法使用 Criteria 就像是 query Select from Ent if parameter null query WHERE fiel
  • tomcat 过滤所有 web 应用程序

    问题 我想对所有网络应用程序进行过滤 我创建了一个过滤器来监视对 apache tomcat 服务器的请求 举例来说 它称为 MyFilter 我在 netbeans 中创建了它 它创建了 2 个独立的目录 webpages contain
  • Apache Commons CLI:替代已弃用的 OptionBuilder?

    IntelliJ 显示此示例代码中不推荐使用 OptionBuilderhttp commons apache org proper commons cli usage html http commons apache org proper
  • OpenJDK 版本控制

    上下文 我想确保我们系统上安装的 Java 不受 CVE 2022 21449 的影响 java version 给出 openjdk version 11 0 7 2020 04 14 LTS OpenJDK Runtime Enviro
  • 将 RSA 密钥从 BigIntegers 转换为SubjectPublicKeyInfo 形式

    WARNING 最初的问题是关于 PKCS 1 编码密钥 而问题中的实际示例需要SubjectPublicKeyInfo X 509 编码密钥 我目前正致力于在 java 中从头开始实现 RSA 算法 特别是密钥生成方面 现在我的代码可以给
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • struts 教程或示例

    我正在尝试在 Struts 中制作一个登录页面 这个想法是验证用户是否存在等 然后如果有错误 则返回到登录页面 错误显示为红色 典型的登录或任何表单页面验证 我想知道是否有人知道 Struts 中的错误管理教程 我正在专门寻找有关的教程 或
  • 重写Object类的finalize()方法有什么用?

    据我所知 在java中如果我们想手动调用垃圾收集器 我们可以执行System gc 1 我们在重写的finalize 方法中做了哪些操作 2 如果我们想手动调用JVM垃圾收集器 是否需要重写finalize 方法 我们在重写的 Finali

随机推荐

  • 针对外部 Web 服务的 ASP.NET MVC Forms 身份验证

    我正在尝试编写一个 ASP NET MVC 应用程序 它是具有 SOAP Web 服务的 CRM 的前端 我希望用户使用他们的 CRM 用户名和密码登录我的 Web 应用程序 然后针对 CRM 进行身份验证 在页面上进行 Web 服务调用等
  • Android Chrome 自定义选项卡回退

    我正在实施后备 chrome 自定义选项卡 我指的是几个链接它有一些 https stackoverflow com questions 34328814 android open chrome custom tab from fragme
  • 从 C# 通用字典中过滤出值

    我有一本 C 字典 Dictionary
  • 如何将 asyncio 与 boost.python 一起使用?

    可以用Python3吗asyncio封装有Boost Python图书馆 I have CPython C 构建的扩展Boost Python 以及编写的函数C 可以工作很长时间 我想用asyncio调用这些函数但是res await cp
  • 如何将 Func 与返回 IOrderedQueryable 的 IQueryable 结合使用

    我正在做一些关于 EF 的研究 发现了一个接受的函数 Func
  • 调用amazondax服务时出现权限异常

    我正在通过 AWS Lambda 方法使用 amazondax 服务 并收到指示缺少权限的异常 但我不知道为此需要哪些权限 Lambda 方法和我的 DAX 集群都使用相同的 VPC 子网和安全组进行设置 我收到以下异常 ERROR 201
  • 检测 Windows Phone 的方向

    我使用 JavaScript 事件 onorientationchange 和参数 window orientation 来检测网站上的方向变化和方向值 这适用于 iPhone 和 Android 但是 Windows Phone 不会触发
  • 如何通过单击菜单中的 Li 将 HTML 页面加载到 DIV 中?

    我遇到了一个非常烦人的问题 所以 我的计划是制作一个包含不同含量锂的 UL 菜单 当我单击它们中的每一个时 我想将一个新的 HTML 页面加载到我的 Content DIV 中 我做了很多研究 发现了 Ajax 和 Jquery 我尝试了很
  • 重置jquery分页插件中的总页数

    我正在使用 TwbsPagination 插件在我的应用程序中显示分页 当我们在初始化时设置页面大小时 它工作正常 但是 根据搜索结果 我想重置总页数 当我尝试使用 pagination twbsPagination totalPages
  • 这是在 Java 中比较两个文档的最佳方法,没有任何复杂性和精确的结果

    我有两个 word 文档 我想在 java 中比较它们 我尝试使用 md5 哈希码 HashCode newFile Files asByteSource newFileInput hash Hashing md5 HashCode old
  • 如何使用 javascript 设置文本框的值

    我试图从查询字符串中获取一个值并将该值分配到文本框中 我能够从查询字符串中获取值 但无法将其分配给文本框 document getElementByName Contact0Email Value email 尝试了上面的代码 但似乎不起作
  • 使用 JAXB 解组期间覆盖声明的编码

    我有一个 XML 文件 其中设置了编码 但实际上文件是用 UTF 8 编码的 使用 JAXB 解组 XML 文件时是否可以覆盖 XML 文件中声明的编码 您可以从 a 中解组内容java io Reader为了提供实际的编码 Unmarsh
  • 在C中,是否保证数组起始地址小于其他元素的地址?

    换句话说 当做 index array x array 0 是否总是保证 根据 C 标准 array 0 地址顺序是有保证的 关系运算符的行为定义在C11 6 5 8p5 http port70 net nsz c c11 n1570 ht
  • 分页逻辑怎么写?

    任何人都可以提供一些想法 逻辑来为我正在处理的搜索页面编写分页逻辑吗 我掌握的信息是总页数对于该搜索 每页10条记录我还收到了上一页和下一页的页码 编写逻辑没问题 我需要做的就是提取该信息并填充 我还获取我所在页面的信息 我只能显示 10
  • 导入com.google.android.gms.gcm.GoogleCloudMessaging无法解析[重复]

    这个问题在这里已经有答案了 我正在尝试在 Android 应用程序中使用通知 我发现了很多 tuto 但都使用了已弃用的 com google android gcm pakage 我发现我必须使用 com google android g
  • Apache - 处理 TCP 连接,但不处理 HTTP 请求

    我有一个 GPS 单元 可以通过 TCP 连接发送数据 但我无法修改它发送的消息 因此它会以 HTTP 请求的形式到达我的服务器 它只能发送消息以预定义的格式 所以 我有以下问题 1 是否可以让 Apache 处理不以 HTTP 请求形式出
  • “Hello World”——TDD 方式?

    自从我接触 TDD 以来 我一直在思考这个问题 构建 Hello World 应用程序的最佳方法是什么 这将在控制台上打印 Hello World 使用测试驱动开发 我的测试会是什么样子 以及大约什么班 Request No 类似维基百科
  • Apache Flink(如何唯一标记作业)

    是否可以使用唯一的名称来标记作业 以便我可以在以后停止它们 我真的不想 grep 并保留作业 ID 简而言之 我想在部署过程中停止一项作业并部署新作业 您可以在启动作业时为其命名execute name String 打电话 例如 val
  • 如何清除 IE 的图标缓存?

    我为我的网站定义了一个最喜欢的图标 任何访问过该网站的浏览器after我添加的图标可以很好地显示favicon 但我自己的浏览器拒绝显示图标 我已经尝试了我能想到的链接的所有变体
  • Java大文件AES加密很慢

    我正在尝试使用 AES CBC 算法加密 512 Mb 文件 大约需要 7 秒 这太长了 如何减少加密时间并使其更快 我使用固定密钥并尝试使用 CipherOutStream 以及 cipher update 而不是 cipher dofi