java - 如何在java/android中解密大文件

标签 java android encryption openssl large-files

主要

我正在寻找一种方法来加密文件,然后在 Android 设备上解密它。 目前我最好的解决方案是:使用 openssl 加密文件,然后使用所示方法在 java 中解密 here .

问题:文件显然太大(5 MB),并且在 Android 模拟器上运行时出现“内存不足”异常。

附加

如果您将以下内容添加到您的答案中,我将不胜感激,但如果您仅对上一部分有答案,那就没问题了:

  1. 压缩:我正在使用 zip 存档来压缩加密文件。这只会产生很小的影响(加密文件的压缩率为 20%,而该文件的非加密版本的压缩率为 80%)。有更好的方法吗?
  2. 加密方法:我希望能够使用标准 Linux 命令压缩文件,即 openssl aes-256-cbc -a -salt -in password.txt -out password.txt.enc
  3. 快速胜过安全:我更喜欢快速解密方法,即使其代价是它不是最安全的方法。

最佳答案

您的主要问题是您试图将所有内容都保留在内存中(显然)。我建议您对工作流程进行一些更改:

  • 摆脱文件的 Base64 编码。这有多个问题,一个是文件比需要的大,另一个是您需要解码编码(这会降低性能,即使只是一点点)。
  • 不要将数据加载到内存(字节数组)中。您需要解决这个问题,因为这就是您的内存问题的根源。使用流而不是字节数组,因此您只在内存中保存一些数据 block 。
  • 正如评论中已经提到的,加密之前进行压缩。加密数据应该看起来像随机数,而随机数通常无法很好地压缩。请注意,解压缩文件也会影响您的 CPU 性能(但通常会带来更快的传输速度)

关于java - 如何在java/android中解密大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18323235/

相关文章:

java - Android - 简化根式

Android - 按钮的边框

Android如何查询android中巨大的数据库(光标大小限制为1MB)

ios - CCCrypto解密: exactly one block less

c# - 是否可以通过 DataContractSerializer 反序列化加密文件?

java - 遍历数组

java - 在 JBoss Wildfly 8.1 上获取 OracleConnection

图像的 JavaFX : Get format (PNG, JPG..)?

安卓 : Error when adding radio group programmatically

encryption - 使用 Wireshark 解密 TLS (Diffie-Hellman) 消息?