如何在java/android中解密大文件 主要的

如何在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加密文件,然后使用所示的方法在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性能(但通常会伴随更快的传输)

        您应该始终在加密之前进行压缩。在CBC模式下加密的任何文件,即使文件为5MB的零,也不会得到20%的压缩。您应该始终在加密之前进行压缩。在CBC模式下加密的任何文件,即使文件为5MB的零,也不会得到20%的压缩。