1

主要的

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

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

额外的

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

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

1 回答 1

1

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

  • 摆脱对文件的 Base64 编码。有多个问题,一个是文件比它们需要的大,另一个是你需要解码你的编码(这会降低性能,即使只有一点点)。
  • 不要将数据加载到内存中(字节数组)。您需要解决这个问题,因为这就是您的内存问题的来源。使用流而不是字节数组,因此您只在内存中保存一些数据块。
  • 正如评论中已经提到的,在加密之前压缩。加密数据应该看起来像随机数,而随机数通常不能很好地压缩。请注意,解压缩文件也会影响您的 CPU 性能(但通常伴随着更快的传输)
于 2013-08-19T21:58:52.650 回答