Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
zeroturnaround__zt-zip_CVE-2018-1002201_1-12 — Javaライブラリ。ZIPアーカイブ操作のための便利なメソッドを提供し、パッキング、アンパッキング、エントリの反復処理、変換、比較を含む。 | Kitploit
ツール/GitHubGitHub/shoucheng3/zeroturnaround__zt-zip_cve-2018-1002201_1-12
汎用ユーティリティユーティリティとフレームワーク
GitHubshoucheng3/zeroturnaround__zt-zip_cve-2018-1002201_1-12

zeroturnaround__zt-zip_CVE-2018-1002201_1-12

Javaライブラリ。ZIPアーカイブ操作のための便利なメソッドを提供し、パッキング、アンパッキング、エントリの反復処理、変換、比較を含む。

リポジトリを見る

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
141年前未レビュー

ZIP - 便利メソッド

継続的インテグレーション

Build Status

クイック概要

このプロジェクトは、Rein Raudjärv がLiveRebelの内部で大量の大規模ZIPアーカイブを処理する必要があったため、開始・コーディングされました。その後、使いやすさととにかく動くという理由から、他のプロジェクトでもこのユーティリティを使い始めました。

このプロジェクトは、ストリームベースのアクセスのためにjava.util.zip.*パッケージを使用して構築されています。ファイルシステムでの使用のためのほとんどの便利メソッドもサポートされています。

インストール

Maven Central

プロジェクトのアーティファクトは Maven Central Repository で入手できます。Mavenプロジェクトに含めるには、依存関係を指定する必要があります。

...
<dependency>
    <groupId>org.zeroturnaround</groupId>
    <artifactId>zt-zip</artifactId>
    <version>1.11</version>
    <type>jar</type>
</dependency>
...

1.8 がJava 1.4互換の最終リリースであることに注意してください。それ以降はJava 1.5が必要です。

背景

私たちには以下の機能要件がありました:

  1. ディレクトリの再帰的なパックとアンパック
  2. エントリの包含/除外
  3. エントリの名前変更
  4. その場でのパック/アンパック - ZIPがディレクトリになり、その逆も可能
  5. ZIPエントリの反復処理
  6. ファイルまたはバイト配列からのエントリの追加または置換
  7. ZIPエントリの変換
  8. 2つのアーカイブの比較 - タイムスタンプを無視してすべてのエントリを比較

そして以下の非機能要件がありました:

  1. 既存のAPIを可能な限り使用する
  2. シンプルに使用できること
  3. 効率的に使用できること - 単一のエントリだけが必要な場合にZIPファイル全体を走査しない
  4. 安全に使用できること - ユーザーがストリームを開いたままにしたり、ファイルをロックしたままにできないようにする
  5. 例外を宣言しない
  6. Java 1.5との互換性

例

展開

ZIPアーカイブ内にエントリが存在するか確認する

boolean exists = ZipUtil.containsEntry(new File("/tmp/demo.zip"), "foo.txt");

ZIPアーカイブからエントリをバイト配列に抽出する

byte[] bytes = ZipUtil.unpackEntry(new File("/tmp/demo.zip"), "foo.txt");

特定のCharsetを使用してZIPアーカイブからエントリをバイト配列に抽出する

byte[] bytes = ZipUtil.unpackEntry(new File("/tmp/demo.zip"), "foo.txt", Charset.forName("IBM437"));

ZIPアーカイブからエントリをファイルシステムに抽出する

ZipUtil.unpackEntry(new File("/tmp/demo.zip"), "foo.txt", new File("/tmp/bar.txt"));

ZIPアーカイブを抽出する

ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"));

ZIPアーカイブを抽出してディレクトリにする

ZipUtil.explode(new File("/tmp/demo.zip"));

ディレクトリ名を含めてZIPアーカイブからディレクトリを抽出する

ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"), new NameMapper() {
  public String map(String name) {
    return name.startsWith("doc/") ? name : null;
  }
});

ディレクトリ名を除いてZIPアーカイブからディレクトリを抽出する

final String prefix = "doc/"; 
ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"), new NameMapper() {
  public String map(String name) {
    return name.startsWith(prefix) ? name.substring(prefix.length()) : name;
  }
});

名前パターンに一致するファイルをZIPアーカイブから抽出する

ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"), new NameMapper() {
  public String map(String name) {
    if (name.contains("/doc")) {
      return name;
    }
    else {
      // mapメソッドからnullを返すとエントリが無視される
      return null;
    }
  }
});

ZIPアーカイブ内の.classエントリ名を出力する

ZipUtil.iterate(new File("/tmp/demo.zip"), new ZipInfoCallback() {
  public void process(ZipEntry zipEntry) throws IOException {
    if (zipEntry.getName().endsWith(".class"))
      System.out.println("Found " + zipEntry.getName());
  }
});

ZIPアーカイブ内の.txtエントリを出力する(Commons IOのIoUtilsを使用)

ZipUtil.iterate(new File("/tmp/demo.zip"), new ZipEntryCallback() {
  public void process(InputStream in, ZipEntry zipEntry) throws IOException {
    if (zipEntry.getName().endsWith(".txt")) {
      System.out.println("Found " + zipEntry.getName());
      IOUtils.copy(in, System.out);
    }
  }
});

圧縮

ディレクトリをZIPアーカイブに圧縮する

ZipUtil.pack(new File("/tmp/demo"), new File("/tmp/demo.zip"));

ディレクトリをZIPアーカイブにする(その場で圧縮)

ZipUtil.unexplode(new File("/tmp/demo.zip"));

親ディレクトリを含めてディレクトリをZIPアーカイブに圧縮する

ZipUtil.pack(new File("/tmp/demo"), new File("/tmp/demo.zip"), new NameMapper() {
  public String map(String name) {
    return "foo/" + name;
  }
});

ファイルからZIPアーカイブにエントリを追加する

ZipUtil.addEntry(new File("/tmp/demo.zip"), "doc/readme.txt", new File("f/tmp/oo.txt"), new File("/tmp/new.zip"));

バイト配列からZIPアーカイブにエントリを追加する

ZipUtil.addEntry(new File("/tmp/demo.zip"), "doc/readme.txt", "bar".getBytes(), new File("/tmp/new.zip"));

ファイルとバイト配列からZIPアーカイブにエントリを追加する

ZipEntrySource[] entries = new ZipEntrySource[] {
    new FileSource("doc/readme.txt", new File("foo.txt")),
    new ByteSource("sample.txt", "bar".getBytes())
};
ZipUtil.addEntries(new File("/tmp/demo.zip"), entries, new File("/tmp/new.zip"));

ファイルとバイト配列から出力ストリームにエントリを追加する

ZipEntrySource[] entries = new ZipEntrySource[] {
    new FileSource("doc/readme.txt", new File("foo.txt")),
    new ByteSource("sample.txt", "bar".getBytes())
};
OutputStream out = null;
try {
  out = new BufferedOutputStream(new FileOutputStream(new File("/tmp/new.zip")));
  ZipUtil.addEntries(new File("/tmp/demo.zip"), entries, out);
}
finally {
  IOUtils.closeQuietly(out);
}

ファイルからZIPアーカイブのエントリを置換する

boolean replaced = ZipUtil.replaceEntry(new File("/tmp/demo.zip"), "doc/readme.txt", new File("/tmp/foo.txt"), new File("/tmp/new.zip"));

バイト配列からZIPアーカイブのエントリを置換する

boolean replaced = ZipUtil.replaceEntry(new File("/tmp/demo.zip"), "doc/readme.txt", "bar".getBytes(), new File("/tmp/new.zip"));

ファイルとバイト配列からZIPアーカイブのエントリを置換する

ZipEntrySource[] entries = new ZipEntrySource[] {
    new FileSource("doc/readme.txt", new File("foo.txt")),
    new ByteSource("sample.txt", "bar".getBytes())
};
boolean replaced = ZipUtil.replaceEntries(new File("/tmp/demo.zip"), entries, new File("/tmp/new.zip"));

ZIPアーカイブ内のエントリを追加または置換する

ZipEntrySource[] addedEntries = new ZipEntrySource[] {
        new FileSource("/path/in/zip/File1.txt", new File("/tmp/file1.txt")),
        new FileSource("/path/in/zip/File2.txt", new File("/tmp/file2.txt")),
        new FileSource("/path/in/zip/File3.txt", new File("/tmp/file2.txt")),
    };
ZipUtil.addOrReplaceEntries(new File("/tmp/demo.zip"), addedEntries);

変換

ZIPアーカイブのエントリを大文字に変換する

boolean transformed = ZipUtil.transformEntry(new File("/tmp/demo"), "sample.txt", new StringZipEntryTransformer() {
    protected String transform(ZipEntry zipEntry, String input) throws IOException {
        return input.toUpperCase();
    }
}, new File("/tmp/demo.zip"));

比較

2つのZIPアーカイブを比較する(エントリのタイムスタンプを無視)

boolean equals = ZipUtil.archiveEquals(new File("/tmp/demo1.zip"), new File("/tmp/demo2.zip"));

同じ名前の2つのZIPアーカイブエントリを比較する(エントリのタイムスタンプを無視)

boolean equals = ZipUtil.entryEquals(new File("/tmp/demo1.zip"), new File("/tmp/demo2.zip"), "foo.txt");

異なる名前の2つのZIPアーカイブエントリを比較する(エントリのタイムスタンプを無視)

boolean equals = ZipUtil.entryEquals(new File("/tmp/demo1.zip"), new File("/tmp/demo2.zip"), "foo1.txt", "foo2.txt");

デバッグ

このライブラリは slf4j-api ロギングフレームワークを使用しています。すべてのログステートメントは DEBUG または TRACE レベルです。使用しているロギングフレームワークに応じて、単純に -Dorg.slf4j.simpleLogger.defaultLogLevel=debug または System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "debug"); で zt-zip ライブラリからのログステートメントを表示できます。さらに、ロギングフレームワークを使用して、パッケージごとにログメッセージのレベルと包含を細かく調整できます。

ツールをダウンロード