如何在java/android中解密大文件 主要的
我正在寻找一种方法来加密一个文件,然后在安卓设备上解密它。 目前我最好的解决方案是:使用openssl加密文件,然后使用所示的方法在java中解密 问题:文件显然太大(5 MB),在android emulator上运行时出现“内存不足”异常 额外的 如果您在回答中添加以下内容,我将不胜感激,但如果您仅对上一节有回答,则可以:如何在java/android中解密大文件 主要的,java,android,encryption,openssl,large-files,Java,Android,Encryption,Openssl,Large Files,我正在寻找一种方法来加密一个文件,然后在安卓设备上解密它。 目前我最好的解决方案是:使用openssl加密文件,然后使用所示的方法在java中解密 问题:文件显然太大(5 MB),在android emulator上运行时出现“内存不足”异常 额外的 如果您在回答中添加以下内容,我将不胜感激,但如果您仅对上一节有回答,则可以: 压缩:我使用zip存档压缩加密文件。这只会产生很小的影响(加密文件压缩率为20%,非加密文件压缩率为80%)。有更好的方法吗 加密方法:我希望能够使用标准的linux命令
openssl aes-256-cbc-a-salt-in password.txt-out password.txt.enc
你的主要问题是你试图把所有的东西都保存在内存中(很明显)。我建议对您的工作流程进行一些更改:
- 摆脱Base64编码您的文件。这有多个问题,一个是文件比需要的大,另一个是需要解码编码(这会降低性能,即使只有一点点)
- 不要将数据加载到内存(字节数组)。您需要解决这个问题,因为这就是内存问题的根源。使用流而不是字节数组,因此在内存中只保存一些数据块
- 正如在注释中已经提到的,在加密之前压缩。加密的数据应该看起来像随机数,而随机数通常不能得到很好的压缩。请注意,解压缩文件也会影响cpu性能(但通常会伴随更快的传输)
- 摆脱Base64编码您的文件。这有多个问题,一个是文件比需要的大,另一个是需要解码编码(这会降低性能,即使只有一点点)
- 不要将数据加载到内存(字节数组)。您需要解决这个问题,因为这就是内存问题的根源。使用流而不是字节数组,因此在内存中只保存一些数据块
- 正如在注释中已经提到的,在加密之前压缩。加密的数据应该看起来像随机数,而随机数通常不能得到很好的压缩。请注意,解压缩文件也会影响cpu性能(但通常会伴随更快的传输)
- 你的主要问题是你试图把所有东西都保存在内存中(显然)。我建议对您的工作流程进行一些更改: