ファイルを圧縮してパスワードで保護する必要があります。これに適した(無料の)ライブラリはありますか?
これはサードパーティが開く必要があるため、パスワード保護は標準ツールで動作する必要があります。
よく検索した結果、3つのアプローチが見つかりました。
単一のファイルZipに適した、無料で入手できるソースコードのセット。ただし、ライセンスはありません。使用法はAesZipOutputStream.zipAndEcrypt(...)です。 http://merkert.de/de/info/zipaes/src.Zip ( https://forums.Oracle.com/forums/thread.jspa?threadID=1526137 =)
更新:このコードはApacheライセンスを取得し、 http://code.google.com/p/winzipaes/ でリリースされています。それは私のために働いた(Zipの1つのファイル)、Javaのオープンソースライブラリの穴をうまく埋めます。
商用製品(執筆時点で500ドル)。トライアルライセンスのアプローチは複雑であるため、これが機能するかどうかは確認できません。また、移植された.NETアプリ: http://www.nsoftware.com/ipworks/Zip/default.aspx
商用製品(執筆時点で290ドル)。 dllを使用するため、Wnidowsにのみ適しています: http://www.example-code.com/Java/Zip.asp
Zip4j 、純粋なJava Zipファイルを処理するライブラリ。PKWareおよびAES暗号化方式の暗号化/復号化をサポートしています。
主な機能:
ライセンス:
これは答えではありませんが、潜在的なソリューションを評価する際に注意する必要があります。
Zip暗号化に関する1つの非常に重要なこと:
Zip暗号化にはいくつかの種類があります。古いタイプ(元のZip標準の一部)は、わずらわしいほどの価値はありません(簡単にオンラインで入手できるアプリで10分以内に解読できます)。
Zipファイルの暗号化を行う場合は、強力な暗号化標準のいずれかを使用してください(WinZipの128ビットおよび256ビットのAES標準が最適にサポートされていると思います)。 技術仕様 -独自のJava暗号化されたZipシステムを開発するときにこれを使用しました(ソースを提供できません-申し訳ありません-内部使用のみです)
暗号化されていないことよりも悪いことは、暗号化されていて間違っていると思うことです:-)
7-Zipには、コマンドラインモードでパスワードを追加するオプションがあります。おそらく、この結果を得るために実行することができます(また、圧縮率も良好です)。
欠点:外部プロセス、ポータブル化が難しい(7-Zip自体がポータブルであっても)、配布ライセンスがわからない。
InfoZipのZipユーティリティも移植性が高く、パスワードもサポートしていることに注意してください。
TrueZipを試すこともできます。機能については、次のリンクを参照してください。 https://christian-schlichtherle.bitbucket.io/truezip/
TrueZipの後継は、次の場所にあります。 https://christian-schlichtherle.bitbucket.io/truevfs/
Winzipaes 1.0.1を使用した例を次に示します。これは単なる要点であり、このコードをこの形式でテストしたことはありません。
import de.idyl.winzipaes.AesZipFileEncrypter;
import de.idyl.winzipaes.impl.AESEncrypterBC;
File aNewZipFile = new File("/tmp/foo.Zip");
File existingUnzippedFile = new File("/tmp/src.txt");
// We use the bouncy castle encrypter, as opposed to the JCA encrypter
AESEncrypterBC encrypter = new AESEncrypterBC();
encrypter.init("my-password", 0); // The 0 is keySize, it is ignored for AESEncrypterBC
AesZipFileEncrypter zipEncrypter = new AesZipFileEncrypter(aNewZipFile, encrypter);
zipEncrypter.add(existingUnzippedFile, "src.txt", "my-password");
// remember to close the zipEncrypter
zipEncrypter.close();
パスワード「my-password」を使用して、Mac上でWinzip(v9 +)または7za(つまり7Zip)を使用して「/tmp/foo.Zip」を解凍できます。
注:上記のコードでパスワードを2回指定する必要がある理由は明らかではありません。これらの2つの場所で異なるパスワードを使用するとどうなるかわかりません。
より良い使用シナリオを提供する場合、他の選択肢があります。
3の場合は、Javaを使用して、Zipのストリームコンテンツを通常のファイルとして暗号化できます。ファイル拡張子を.ezipなどに変更するのがおそらく最善です。
1と2の場合、前述の chillkat ソリューションまたは同等のソリューションを使用できます。ただし、chillkatは純粋なJavaソリューションではなく、JNIを使用することに注意してください。
追加情報:私はもう少しグーグルで検索しましたが、実際、これは非常に一般的な質問であり、無料のソリューションはないようです(まだ?)。
これで、Zip暗号化の標準アルゴリズムが適切に定義されました。Zipファイル形式については、PKWAREの アプリケーションノート を参照してください。暗号化されたストリームで行われた暗号化のようです。誰かがそれをコーディングしたいと思うなら...
さて、なぜサンはそれをライブラリに含めなかったのだろうか?標準の欠如?特許/法的問題?使用するには弱すぎますか?
これに適した(無料の)ライブラリはありますか?
Java.util.Zipは圧縮を行いますが、パスワードは行いません。いいえ、無料になるものは知りません。 最も安い 私が見た限りでは、開発者シートは150ドルです。