ファイルを圧縮してパスワードで保護する必要があります。これに適した(無料の)ライブラリはありますか?
これは第三者が開く必要があるため、パスワード保護は標準ツールで機能する必要があります。
ファイルを圧縮してパスワードで保護する必要があります。これに適した(無料の)ライブラリはありますか?
これは第三者が開く必要があるため、パスワード保護は標準ツールで機能する必要があります。
zip ファイルを処理する純粋な Java ライブラリであるZip4jを試すことができます。PKWare および AES 暗号化方式の暗号化/復号化をサポートします。
主な機能:
ライセンス:
UPDATE 2020: 現在、特にZip4Jなど、他の選択肢があります。
多くの検索の後、私は3つのアプローチを見つけました:
1 つのファイル zip に適した、自由に利用できるソース コードのセット。ただし、ライセンスはありません。使用法は AesZipOutputStream.zipAndEcrypt(...) です。 http://merkert.de/de/info/zipaes/src.zip ( https://forums.oracle.com/forums/thread.jspa?threadID=1526137 )
更新: このコードは現在 Apache のライセンスを受けており、https://github.com/mobsandgeeks/winzipaesでリリースされています ( Google コードの元のホームからエクスポートされています)。それは私にとってはうまくいきました(zip内の1つのファイル)、Javaのオープンソースライブラリの穴をうまく埋めます。
商用製品 (執筆時点で 500 ドル)。彼らの試用ライセンスのアプローチは複雑であるため、これが機能するかどうかは確認できません。また、移植された .NET アプリ: http://www.nsoftware.com/ipworks/zip/default.aspx
商用製品 (執筆時点で 290 ドル)。dll を使用するため、Wnidows にのみ適しています: http://www.example-code.com/java/zip.asp
これは答えではありませんが、考えられる解決策を評価する際には注意が必要です。
zip 暗号化に関する非常に重要な点の 1 つ:
zip 暗号化にはいくつかの種類があります。古いタイプ (元の zip 標準の一部) は、気にする価値はまったくありません (オンラインで簡単に入手できるアプリを使用すると、10 分以内にクラックできます)。
zip ファイルの暗号化を行っている場合は、必ず強力な暗号化標準の 1 つを使用してください (WinZip の 128 ビットおよび 256 ビット AES 標準が最もよくサポートされていると思います)。技術仕様は次のとおりです。これは、独自の Java 暗号化 zip システムを開発するときに使用しました (ソースを提供できません - 申し訳ありませんが、内部使用のみです)。
暗号化がないことよりも悪い唯一のことは、暗号化されていると考えて間違っていることです:-)
7-Zip には、コマンドライン モードでパスワードを追加するオプションがあります。おそらく、これを実行してこの結果を得ることができます (また、圧縮率も良好です)。
欠点: 外部プロセス、移植性が難しい (7-Zip 自体が移植可能であっても)、配布ライセンスが不明。
InfoZip の Zip ユーティリティは、移植性も高く、パスワードもサポートしていることに注意してください。
You can also try TrueZip. See the following links for features: https://christian-schlichtherle.bitbucket.io/truezip/
The successor of TrueZip can be found here: 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 つの場所で異なるパスワードを使用するとどうなるかわかりません。
追加情報: 私はもう少しググってみましたが、実際、これは非常によくある質問であり、無料の解決策はないようです (まだ?)。
これで、Zip 暗号化の標準アルゴリズムが明確に定義されました。.ZIP ファイル形式に関するPKWARE のアプリケーション ノートを参照してください。暗号化されたストリームで行われた暗号化のようです。誰かがそれをコーディングしたいと感じたら...
では、なぜ Sun はそれをライブラリに含めなかったのだろうか? 基準不足?特許/法的な問題?弱すぎて使えない?
より良い使用シナリオを提供する場合は、他の選択肢があります。
3 の場合は、java を使用して zip のストリーム コンテンツを通常のファイルとして暗号化できます。おそらく、ファイル拡張子を .ezip などに変更することをお勧めします。
1 と 2 については、前述のChillkatソリューション、または同等のソリューションを使用できます。ただし、chillkat は純粋な Java ソリューションではなく、JNI を使用することに注意してください。
これに適した(無料の)ライブラリはありますか?
java.util.zip は圧縮を行いますが、パスワードは行いません。いいえ、そうする無料のものは知りません。私が見た中で最も安いのは、開発者シートで 150 ドルです。