ファイルの圧縮に使用する無料ライブラリに関する推奨事項 [終了]
-
03-07-2019 - |
質問
ファイルを圧縮してパスワードで保護する必要があります。これに適した (無料) ライブラリはありますか?
これはサードパーティによって開かれる必要があるため、パスワード保護は標準ツールで機能する必要があります。
解決
よく検索した結果、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
他のヒント
zipファイルを処理するための純粋なJavaライブラリである Zip4j を試すことができます。 PKWareおよびAES暗号化方式の暗号化/復号化をサポートしています。
主な機能:
- Zipファイルからのファイルの作成、追加、抽出、更新、削除
- パスワードで保護されたZipファイルの読み取り/書き込み
- AES 128/256暗号化をサポート
- 標準のZip暗号化をサポート
- Zip64形式をサポート
- ストア(圧縮なし)およびDeflate圧縮方式をサポート
- 分割Zipファイルからファイルを作成または抽出します(例:z01、z02、... zip)
- Unicodeファイル名のサポート
- 進捗モニター
ライセンス:
- Zip4jは、 Apacheライセンス、バージョン2.0 でリリースされています。
これは答えではありませんが、潜在的な解決策を評価する際に注意する必要があります。
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();
" /tmp/foo.zip"を解凍できますMacでWinzip(v9 +)または7za(7zip)を使用し、パスワード「my-password」を使用します。
注:上記のコードでパスワードを2回指定する必要がある理由は明らかではありません。これら2つの場所で異なるパスワードを使用するとどうなるかわかりません。
より良い使用シナリオがあれば、他の選択肢もあります。
- zip パスワードを処理できる標準の Zip ツールで zip を開く必要がありますか?
- 前と同じ質問ですが、この zip を開く必要がある外部エンティティにこの zip を渡しますか?
- それは内部のみで、zip の内容を保護したいだけですか?
3 の場合は、Java を使用して zip のストリーム コンテンツを通常のファイルとして暗号化することができます。おそらく、ファイル拡張子も .ezip などに変更するのが最善です。
1 と 2 については、 チルカット 前述のソリューション、または同等のもの。ただし、chillkat は純粋な Java ソリューションではなく、JNI を使用することに注意してください。
追加情報:私はもう少しグーグルで検索しましたが、実際、これは非常に一般的な質問であり、無料のソリューションはないようです(まだ?)。
現在、Zip暗号化の標準アルゴリズムは明確に定義されています。PKWAREのアプリケーションノート。暗号化されたストリームで行われた暗号化のようです。誰かがそれをコーディングしたいと思うなら...
今、なぜサンはそれをライブラリに含めなかったのだろうか?標準の欠如?特許/法的問題?使用するには弱すぎますか?
これに適した(無料の)ライブラリはありますか?
java.util.zipは圧縮を実行しますが、パスワードは実行しません。いいえ、無料になるものは知りません。 私が見た中で最も安いは、開発者席で150ドルです。