web-dev-qa-db-ja.com

ファイルの圧縮に使用する無料のライブラリに関する推奨事項

ファイルを圧縮してパスワードで保護する必要があります。これに適した(無料の)ライブラリはありますか?

これはサードパーティが開く必要があるため、パスワード保護は標準ツールで動作する必要があります。

72

よく検索した結果、3つのアプローチが見つかりました。

単一のファイルZipに適した、無料で入手できるソースコードのセット。ただし、ライセンスはありません。使用法はAesZipOutputStream.zipAndEcrypt(...)です。 http://merkert.de/de/info/zipaes/src.Ziphttps://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

32
JodaStephen

Zip4j 、純粋なJava Zipファイルを処理するライブラリ。PKWareおよびAES暗号化方式の暗号化/復号化をサポートしています。

主な機能:

  • Zipファイルからファイルを作成、追加、抽出、更新、削除する
  • パスワードで保護されたZipファイルの読み取り/書き込み
  • AES 128/256暗号化をサポート
  • 標準のZip暗号化をサポート
  • Zip64形式をサポート
  • Store(圧縮なし)およびDeflate圧縮方式をサポート
  • 分割Zipファイルからファイルを作成または抽出します(例:z01、z02、... Zip)
  • Unicodeファイル名をサポート
  • 進捗モニター

ライセンス:

48
Matt

これは答えではありませんが、潜在的なソリューションを評価する際に注意する必要があります。

Zip暗号化に関する1つの非常に重要なこと:

Zip暗号化にはいくつかの種類があります。古いタイプ(元のZip標準の一部)は、わずらわしいほどの価値はありません(簡単にオンラインで入手できるアプリで10分以内に解読できます)。

Zipファイルの暗号化を行う場合は、強力な暗号化標準のいずれかを使用してください(WinZipの128ビットおよび256ビットのAES標準が最適にサポートされていると思います)。 技術仕様 -独自のJava暗号化されたZipシステムを開発するときにこれを使用しました(ソースを提供できません-申し訳ありません-内部使用のみです)

暗号化されていないことよりも悪いことは、暗号化されていて間違っていると思うことです:-)

11
Kevin Day

7-Zipには、コマンドラインモードでパスワードを追加するオプションがあります。おそらく、この結果を得るために実行することができます(また、圧縮率も良好です)。

欠点:外部プロセス、ポータブル化が難しい(7-Zip自体がポータブルであっても)、配布ライセンスがわからない。

InfoZipのZipユーティリティも移植性が高く、パスワードもサポートしていることに注意してください。

4
PhiLho

TrueZipを試すこともできます。機能については、次のリンクを参照してください。 https://christian-schlichtherle.bitbucket.io/truezip/

TrueZipの後継は、次の場所にあります。 https://christian-schlichtherle.bitbucket.io/truevfs/

3
Kai Mechel

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つの場所で異なるパスワードを使用するとどうなるかわかりません。

2
Marc

より良い使用シナリオを提供する場合、他の選択肢があります。

  1. Zipパスワードを処理できる標準のZipツールでZipを開く必要がありますか?
  2. 前と同じ質問で、このZipを開く必要がある外部エンティティにこのZipを渡しますか?
  3. 内部のみで、zipの内容を保護するだけですか?

3の場合は、Javaを使用して、Zipのストリームコンテンツを通常のファイルとして暗号化できます。ファイル拡張子を.ezipなどに変更するのがおそらく最善です。

1と2の場合、前述の chillkat ソリューションまたは同等のソリューションを使用できます。ただし、chillkatは純粋なJavaソリューションではなく、JNIを使​​用することに注意してください。

1
Donal Tobin

追加情報:私はもう少しグーグルで検索しましたが、実際、これは非常に一般的な質問であり、無料のソリューションはないようです(まだ?)。

これで、Zip暗号化の標準アルゴリズムが適切に定義されました。Zipファイル形式については、PKWAREの アプリケーションノート を参照してください。暗号化されたストリームで行われた暗号化のようです。誰かがそれをコーディングしたいと思うなら...

さて、なぜサンはそれをライブラリに含めなかったのだろうか?標準の欠如?特許/法的問題?使用するには弱すぎますか?

1
PhiLho

これに適した(無料の)ライブラリはありますか?

Java.util.Zipは圧縮を行いますが、パスワードは行いません。いいえ、無料になるものは知りません。 最も安い 私が見た限りでは、開発者シートは150ドルです。

0
Oli