主要
我正在寻找一种方法来加密文件,然后在 Android 设备上解密它。 目前我最好的解决方案是:使用 openssl 加密文件,然后使用所示方法在 java 中解密 here .
问题:文件显然太大(5 MB),并且在 Android 模拟器上运行时出现“内存不足”异常。
附加
如果您将以下内容添加到您的答案中,我将不胜感激,但如果您仅对上一部分有答案,那就没问题了:
- 压缩:我正在使用 zip 存档来压缩加密文件。这只会产生很小的影响(加密文件的压缩率为 20%,而该文件的非加密版本的压缩率为 80%)。有更好的方法吗?
- 加密方法:我希望能够使用标准 Linux 命令压缩文件,即
openssl aes-256-cbc -a -salt -in password.txt -out password.txt.enc
- 快速胜过安全:我更喜欢快速解密方法,即使其代价是它不是最安全的方法。
最佳答案
您的主要问题是您试图将所有内容都保留在内存中(显然)。我建议您对工作流程进行一些更改:
- 摆脱文件的 Base64 编码。这有多个问题,一个是文件比需要的大,另一个是您需要解码编码(这会降低性能,即使只是一点点)。
- 不要将数据加载到内存(字节数组)中。您需要解决这个问题,因为这就是您的内存问题的根源。使用流而不是字节数组,因此您只在内存中保存一些数据 block 。
- 正如评论中已经提到的,在加密之前进行压缩。加密数据应该看起来像随机数,而随机数通常无法很好地压缩。请注意,解压缩文件也会影响您的 CPU 性能(但通常会带来更快的传输速度)
关于java - 如何在java/android中解密大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18323235/