私はいくつかの小さな(1MB未満)ファイルと大きなファイル(約500MB)を暗号化するアプリケーションを開発しています。
どのようにすれば、ファイルを暗号化し、暗号化されたバージョンをディスク上のどこかに効率的に(すなわち高速に)保存できますか?
暗号化に時間がかかっても問題はありませんか?JavaでAESを使用してファイルを効果的に暗号化する
答えて
あなたが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はそうではありません。)これらは、ファイルが正しく解読され、破損していないことを確認します。
@owlstead GCMのAPIがあり、SunJCEがそれを提供することを期待していますが、確認すると、ドキュメントに記載されていませんでした。(http://docs.oracle.com/jp) com/javase/7/docs/technotes/guides/security/SunProviders.html)含まれるJCEプロバイダを使用してOracleから提供する約束を知っていますか? – erickson
私のお詫びをお詫び申し上げますが、おそらく非標準のビルドパスを使用していました。ソースから:「Java SEは既にJDK 7でAEAD/GCMインターフェースを定義しています。JDK 8では、JCA/JCEプロバイダーがこれらのAEAD/GCMインターフェースを実装します。現在のPKCS11標準ではそれをサポートしています。* " –
もちろん、Bouncy Castle APIにはGCMモードを実行する実装が含まれています。私はスタンフォード大学の暗号クラスを終了した後、プロバイダにそれを組み立てようとします。 –
Bhavikが上述したように、BouncyCastleは、軽量で成熟した、良い方法です。一度に読み書きする量を制御できるので、暗号化の進行状況を確実に確認できます。ファイルからバイトを読み取り、それらを暗号化してパイプラインの別のファイルに書き戻すことができます。
この例は、この質問に記載されている:あなたは How to encrypt a string/stream with bouncycastle pgp without starting with a file
- 1. AES Java暗号化
- 2. AESでJavaを使用してopenssl解読で暗号化
- 3. AES-256で暗号化Java
- 4. AESアルゴリズムを使用してC#でjavascriptと暗号化を暗号化する
- 5. C#でJavaでAES暗号化ファイルを復号する場合
- 6. JAZAを使用してAESで大きなファイルを暗号化
- 7. Java暗号化に関する質問(AES-ECB暗号化)
- 8. phpseclibを使用したAES暗号化
- 9. MonoTouchを使用したAES暗号化
- 10. コマンドラインを使用したAES暗号化
- 11. AES暗号化は、java /アンドロイド
- 12. PDFsharpを使用してAES 128ビット暗号化ファイルを開く
- 13. AES暗号化は、復号化は、Java
- 14. AESでopensslコマンドラインツールで暗号化し、Javaで復号化する
- 15. アンドロイドでAESを使用した暗号化とJavaでの復号化
- 16. linuxを使用したAESによるファイル暗号化/復号化
- 17. LinuxカーネルでAESを使用した暗号化と復号化
- 18. JavaでAESアルゴリズムを使用してstringbuilderメッセージを暗号化する方法
- 19. JavaでAES暗号化ファイルを解読する
- 20. Java暗号化:AES/CBC/PKCS5Paddingシナリオで使用する種子
- 21. AESを使用して暗号化された結果を制限する
- 22. JavaとPHPを使用したAES CBC 128ビット暗号化
- 23. Java AES CryptoJSを使用したJavascriptの暗号化
- 24. AES暗号化
- 25. DirectComputeを使用するAES暗号化/復号化のサンプルコード
- 26. AESを使用してSOAPエンベロープを暗号化する
- 27. RSAとAESを使用した暗号化/復号化。基準?
- 28. AESとハッシュパスワードをキーにした画像ファイルのJava暗号化と復号化
- 29. AES暗号化/復号化
- 30. AES暗号化Java - > PHP - > Java
どの程度のセキュリティを必要としていますか?一般的に、暗号化が弱ければ速く、逆にすると暗号化が速くなります。 –
あなたは 'BouncyCastel' APIを使うことができます。 –
@NoxHarmonium:どうすれば測定できますか? ;-)私はできるだけ安全なファイルが必要です。私は暗号化が遅い気にしません。私はそれが行くことができる最大レートで動作したいだけです。 (私は 'java.io'と' java.nio'を使ってファイルコピーのようなものを意味します) – RYN