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 エンコードを取り除きます。これには複数の問題があります。1 つは、ファイルが必要以上に大きいことです。もう 1 つは、エンコードをデコードする必要があることです (ほんの少しでもパフォーマンスが低下します)。
  • データをメモリ (バイト配列) にロードしないでください。メモリの問題が発生する場所であるため、この問題に対処する必要があります。バイト配列の代わりにストリームを使用して、データの一部のチャンクのみをメモリに保持します。
  • コメントで既に述べたように、暗号化のに圧縮します。暗号化されたデータは乱数のように見える必要があり、通常、乱数はうまく圧縮できません。ファイルの解凍もCPUのパフォーマンスに影響を与えることに注意してください(ただし、通常はより高速な転送に伴います)
于 2013-08-19T21:58:52.650 に答える