ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

Javaでzipファイルのパスワードを扱う方法

2007-12-14 23:59:26 | PG(Java)

Javaって(サードパーティー製まで含めれば)何でもユーティリティーが揃ってそうな気がしてたけど、zipファイルの読み込みも作成も出来るくせに、なんでパスワードに対応してないんだろうな?
需要があんまり無いのかな?

でもちょっと要望があったので(Solarisのzipコマンドでは暗号化に対応してないしJavaも無理だったのでその時は諦めたけど)、Info-ZIPのソースを元に暗号化・復号化するクラスを作ってみた。

Info-ZIPがソースを公開しているのは有り難い。ライセンスから言って、移植していいのかどうかは不明だけど(汗)
ライセンスに詳しい人がいたら、教えてもらえるととっても嬉しいなぁ


コメント (2)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ハッシュパーティション索引... | トップ | SWリプレイ『猫の手お気楽娘... »
最新の画像もっと見る

2 コメント

コメント日が  古い順  |   新しい順
Unknown (通りすがり)
2008-12-20 09:46:01
暗号化zipのライブラリを使わせていただいています。

暗号化したzipファイルが2通りのパスワードで復号できてしまうのですが、なぜでしょうか。
例えば別のソフトウェアを用いて qwerty というパスワードで暗号化したファイルを、
このライブラリで復号すると、qwerty の他に !8 や "L といったパスワードでも復号できてしまいます。

また、異なるファイルを qwerty というパスワードで暗号化した場合、
それぞれ正規のパスワード以外の「もう1つの」パスワードは異なります。
返信する
ZIPの仕様? (ひしだま)
2008-12-21 23:05:36
ライブラリーを使っていただいてありがとうございます。
自分自身、ZIPの仕様そのものに詳しいわけではないのですが、その現象はある意味仕様かと思います。

パスワードのチェックはヘッダー部のCRCが一致しているかどうかなので、たまたま一致してしまうケースがあるようです。
ただ、その場合でも、実際のデータは正しく復元できていないと思います。

lhacaやlhut(unzip32)といったツールでも同じ現象が起きます。
WindowsXPのZIP復号でも、パスワードエラーとは別の動作をしますし。

データそのもののCRCまでチェックすれば正しいデータかどうかは分かりそうです。
http://www.ne.jp/asahi/hishidama/home/tech/java/zip.html#h_CRC_check
が、パスワードが間違った為なのかファイルが破損した為なのかは分からないでしょうね…。

なお、暗号化のCRCの初期値は毎回ランダムなので、同じ内容のファイルを同じパスワードで暗号化したとしても異なる内容になる為、たまたま一致するパスワードは毎回異なるものになると思われます。
返信する

コメントを投稿

PG(Java)」カテゴリの最新記事