6

小さなファイル (1MB 未満) と大きなファイル (約 500MB) を暗号化するアプリケーションを開発しています。
ファイルを暗号化し、暗号化されたバージョンをディスク上のどこかに効果的に保存するにはどうすればよいですか (iefast)?
時間がかかった場合、暗号化を進行させることはできますか?

4

2 に答える 2

6

AESキーといくつかの出力ストリームがあると仮定して、暗号化デコレータをストリームに追加する方法を次に示します。

Cipher enc = Cipher.getInstance("AES/CBC/PKCS5Padding");
enc.init(Cipher.ENCRYPT_MODE, key);
AlgorithmParameters params = enc.getParameters();
IvParameterSpec iv = params.getParameterSpec(IvParameterSpec.class);
out.write(iv.getIV());
out = new CipherOutputStream(enc, out); 

これにより、暗号文の先頭にIVが追加されます。復号化するときは、暗号を初期化するためにそれを解析する必要があります。

より良い解決策は、長期的には、S/MIMEの基礎である暗号化メッセージ構文を実装するライブラリを使用することです。これは、復号化に使用できるアルゴリズムとキーに関するメタデータを記録します。

プロバイダーが実装している場合は、GCMやCCMなどのAEADモードもお勧めします。(SunJCEは行いません。)これらは、ファイルが正しく復号化されており、破損していないことを確認します。

于 2012-08-12T06:53:39.500 に答える
2

Bhavik が上で述べたように、軽量で成熟した BouncyCastle は良い方法です。一度に読み書きする量を制御できるため、暗号化の進行状況を確実に確認できます。ファイルからバイトを読み取り、それらを暗号化し、パイプライン内の別のファイルに書き戻すことができます。

この例は、この質問に記載されています: How to encrypt a string/stream with bouncycastle pgp without starting with a file

于 2012-08-12T06:55:19.813 に答える