Java使用对称加密算法加密大文件内存资源消耗问题

发布于 2022-09-04 11:58:52 字数 554 浏览 23 评论 0

公司要求和外网合作方通信传输文件时要求除使用https以为应用层自己完成一次加密,但java层写得加密方式都需要将文件完整内容读出后再进行加密,这无疑占用内存资源是个大问题,如果文件为10MB即使加密后依然为10MB,则每个并发需要消耗20MB的内存资源(例子中的byteContent和result各占10MB),同时GC也是个较大的负担。如果我对文件进行分片处理每1MB做一次加密,则合作方也需要根据同样的分片规则对文件进行解密后再重组明文文件,这无疑是提高了接入方技术复杂度,技术接入文档也比较难描述清楚,请问有什么方式能降低单个并发线程对内存的资源消耗同时不增加接入技术的复杂度?

Cipher cipher = Cipher.getInstance("AES");// 创建密码器  
byte[] byteContent = IOUtils.toByteArray(fileInputStream);// 获取文件内容
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化  
byte[] result = cipher.doFinal(byteContent);  // 对文件内容进行加密

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

叹沉浮 2022-09-11 11:58:52

使用 CipherOutputStream

Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);

InputStream is = new FileInputStream(file);  
CipherOutputStream out = new CipherOutputStream(new FileOutputStream(dest), cipher)

IOUtils.copyLarge(is, out);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文