エリア | 要素 | シグネチャ | |
---|---|---|---|
格納エリア | File 1 | Local file header | $04034B50 |
File data | (なし) | ||
File 2 〜 | (格納するファイルの数だけ繰り返す) | ||
情報エリア | File 1 | Central directory header | $02014B50 |
File 2 〜 | (格納するファイルの数だけ繰り返す) | ||
ZIP情報エリア | - | End of central directory record | $06054B50 |
Size | フィールド | 値 |
---|---|---|
4 | local file header signature
Local file header であることを示す固定値
|
$04034B50 = $50, $4B, $03, $04 |
2 | version needed to extract
展開に必要なZIPのバージョン補足
|
10 (ver.1.0) ⇒無圧縮ファイル
20 (ver.2.0) ⇒フォルダ、デフレート、パスワード保護
45 (ver.4.5) ⇒ZIP64
|
2 | general purpose bit flag オプションフラグ |
ビットフラグ
%0000000000000001 (パスワード保護)
%0000000000001000 (Data descriptor を使用)
%0000100000000000 (ファイル名やコメントが UTF-8文字)
|
2 | compression method
ファイル圧縮に用いたアルゴリズム補足
|
0 (無圧縮ファイル)
8 (デフレート形式)
|
2 | last mod file time タイムスタンプ(時刻) |
ビット割り当て
%1111100000000000 = 0〜23 [時]
%0000011111100000 = 0〜59 [分]
%0000000000011111 = 0〜29 [×2秒] ⇒1で2秒分を表す
|
2 | last mod file date タイムスタンプ(日付) |
ビット割り当て
%1111111000000000 = 0〜 [+1980年] ⇒西暦1980年からの経過年
%0000000111100000 = 1〜12 [月]
%0000000000011111 = 1〜31 [日]
|
4 | crc-32
ファイルのデータから算出した CRC-32 の値補足
|
n (CRC-32)
0 (Data descriptor 使用の場合)
|
4 | compressed size
圧縮後のデータ量、File data のサイズ
無圧縮なら uncompressed size フィールドと同値
|
n [byte]
0 [byte] (データ無し) ⇒フォルダ、空ファイルなど
0 (Data descriptor 使用の場合)
$FFFFFFFF (ZIP64)
|
4 | uncompressed size
圧縮前のデータ量、つまりファイルサイズ
|
n [byte]
0 [byte] (データ無し) ⇒フォルダ、空ファイルなど
0 (Data descriptor 使用の場合)
$FFFFFFFF (ZIP64)
|
2 | file name length
file name フィールドのサイズ
|
n [byte]
0 [byte] (名前なし) ⇒標準入力からの流入
|
2 | extra field length
extra field フィールドのサイズ
|
n [byte]
0 [byte] (extra field を使用しない)
|
s | file name ファイル名を格納する領域 |
"ファイル名"
※ドライブ・デバイスレター・先頭のスラッシュは無し
※フォルダ区切りは普通のスラッシュ"/"
|
s | extra field
拡張データを格納する領域補足
|
任意データ |
Size | フィールド | 値 |
---|---|---|
s | File data ファイルデータ |
無圧縮の場合、ファイルの内容がそのまま格納される
圧縮した場合、圧縮後のデータが格納される
|
Size | フィールド | 値 |
---|---|---|
4 | data descriptor header signature (?)
Data descriptor であることを示す固定値
|
$08074B50 = $50, $4B, $07, $08 |
4 | crc-32 ファイルのデータから算出した CRC-32 の値 |
n (CRC-32) |
4 | compressed size
圧縮後のデータ量、無圧縮なら uncompressed size と同値
|
n [byte] |
4 | uncompressed size
圧縮前のデータ量、つまりファイルサイズ
|
n [byte] |
Size | フィールド | 値 |
---|---|---|
4 | crc-32 ファイルのデータから算出した CRC-32 の値 |
n (CRC-32) |
4 | compressed size
圧縮後のデータ量、無圧縮なら uncompressed size と同値
|
n [byte] |
4 | uncompressed size
圧縮前のデータ量、つまりファイルサイズ
|
n [byte] |
Size | フィールド | 値 |
---|---|---|
4 | central file header signature
Central directory header であることを示す固定値
|
$02014B50 = $50, $4B, $01, $02 |
1 | version made by
ZIPファイル製作を行ったOSとアプリの情報
lower byte:アプリがサポートするZIPのバージョン
upper byte:OSの種類補足
|
10 (ver.1.0) ⇒無圧縮ファイル
20 (ver.2.0) ⇒フォルダ、デフレート、パスワード保護
45 (ver.4.5) ⇒ZIP64
|
1 |
00 (MS-DOS)
03 (UNIX)
07 (Macintosh)
|
|
2 | version needed to extract
展開に必要なZIPのバージョン補足
|
10 (ver.1.0) ⇒無圧縮ファイル
20 (ver.2.0) ⇒フォルダ、デフレート、パスワード保護
45 (ver.4.5) ⇒ZIP64
|
2 | general purpose bit flag オプションフラグ |
ビットフラグ
%0000000000000001 (パスワード保護)
%0000000000001000 (Data descriptor を使用)
%0000100000000000 (ファイル名やコメントが UTF-8文字)
|
2 | compression method
ファイル圧縮に用いたアルゴリズム補足
|
0 (無圧縮ファイル)
8 (デフレート形式)
|
2 | last mod file time タイムスタンプ(時刻) |
ビット割り当て
%1111100000000000 = 0〜23 [時]
%0000011111100000 = 0〜59 [分]
%0000000000011111 = 0〜29 [×2秒] ⇒1で2秒分を表す
|
2 | last mod file date タイムスタンプ(日付) |
ビット割り当て
%1111111000000000 = 0〜 [+1980年] ⇒西暦1980年からの経過年
%0000000111100000 = 1〜12 [月]
%0000000000011111 = 1〜31 [日]
|
4 | crc-32
ファイルのデータから算出した CRC-32 の値補足
|
n (CRC-32) |
4 | compressed size
圧縮後のデータ量、File data のサイズ
無圧縮なら uncompressed size フィールドと同値
|
n [byte]
0 [byte] (データ無し) ⇒フォルダ、空ファイルなど
$FFFFFFFF (ZIP64)
|
4 | uncompressed size
圧縮前のデータ量、つまりファイルサイズ
|
n [byte]
0 [byte] (データ無し) ⇒フォルダ、空ファイルなど
$FFFFFFFF (ZIP64)
|
2 | file name length
file name フィールドのサイズ
|
n [byte]
0 [byte] (名前なし) ⇒標準入力からの流入
|
2 | extra field length
extra field フィールドのサイズ
|
n [byte]
0 [byte] (extra field を使用しない)
|
2 | file comment length
file comment フィールドのサイズ
|
n [byte]
0 [byte] (file comment を使用しない)
|
2 | disk number start
対応する Local file header が格納されているディスクの番号補足
|
0 (ディスク分割はしない)
n [番目] (ディスクの識別番号)
$FFFF (ZIP64)
|
2 | internal file attributes
データの属性(性質を示す)ビットフラグ
|
0 (バイナリデータ)
1 (ASCII、テキストファイル)
※確かな場合にビットOnする
※展開器によっては改行コードなどを変換
|
4 | external file attributes
ファイルの属性(読み込み専用とか隠しファイルとか)
|
※この値はOSに依存
※展開器は属性を再現したりしなかったり… ⇒隠しファイルが丸見えになった事例有り
|
4 | relative offset of local header
対応する Local file header までのオフセット
ZIPファイル先頭から(ディスク分割時はそのディスクの先頭から)のオフセット補足
|
n [byte] (オフセット)
$FFFFFFFF (ZIP64)
|
s | file name ファイル名を格納する領域 |
"ファイル名"
※ドライブ・デバイスレター・先頭のスラッシュは無し
※フォルダ区切りは普通のスラッシュ"/"
|
s | extra field
拡張データを格納する領域補足
|
任意データ |
s | file comment 当該ファイルに対してのコメントを格納する領域 |
"コメント" (コメント文字列) |
Size | フィールド | 値 |
---|---|---|
4 | end of central dir signature
End of central directory record であることを示す固定値
|
$06054B50 = $50, $4B, $05, $06 |
2 | number of this disk
このディスク(End of central directory record の有る)の番号
ディスクの総数補足
|
0 (ディスク分割はしない)
n [番目] (ディスクの識別番号)
$FFFF (ZIP64)
|
2 | number of the disk with the start of the central directory
最初の Central directory header が有るディスクの番号
|
0 (ディスク分割はしない)
n [番目] (ディスクの識別番号)
$FFFF (ZIP64)
|
2 | total number of entries in the central directory on this disk
基本的にはファイル数のこと
ディスク分割において、同じディスクから取得できる Central directory header の数
|
n [個]
$FFFF (ZIP64)
|
2 | total number of entries in the central directory
基本的にはファイル数のこと
ZIPファイルに格納してある Central directory header の総数
|
n [個]
$FFFF (ZIP64)
|
4 | size of the central directory
全ての Central directory header サイズの合計値
|
n [byte]
$FFFFFFFF (ZIP64)
|
4 | offset of start of central directory with respect to the starting disk number
最初の Central directory header までのオフセット
ZIPファイル先頭から(ディスク分割時はそのディスクの先頭から)のオフセット
|
n [byte] (オフセット)
$FFFFFFFF (ZIP64)
|
2 | .ZIP file comment length
.ZIP file comment フィールドのサイズ
|
n [byte]
0 [byte] (.ZIP file comment を使用しない)
|
s | .ZIP file comment
ZIPファイルに対してのコメントを格納する領域
|
文字列? (安全性は保証されない) |
Size | フィールド | 値 |
---|---|---|
2 | HeaderID レコードの種類を示す固定値 |
$0001 (Zip64 extended information extra field) |
2 | DataSize レコードの大きさ |
以下の合計値
8 [byte] (Original Size を持つ場合)
8 [byte] (Compressed Size を持つ場合)
8 [byte] (Relative Header Offset を持つ場合)
4 [byte] (Disk Start Number を持つ場合)
|
(8) | Original Size 圧縮前のデータ量 |
n [byte] |
(8) | Compressed Size 圧縮後のデータ量 |
n [byte] |
(8) | Relative Header Offset
当該ファイルの Local file header までのオフセット
|
n [byte] |
(4) | Disk Start Number 格納しているディスクの番号 |
n [番目] |
Size | フィールド | 値 |
---|---|---|
2 | HeaderID レコードの種類を示す固定値 |
$5455 (extended timestamp) |
2 | DataSize レコードの大きさ |
以下の合計値
1 [byte] (ビットフラグ分)
4 [byte] (更新日時を持つ場合)
4 [byte] (アクセス日時を持つ場合)
4 [byte] (作成日時を持つ場合)
|
1 | ビットフラグ |
%00000001 (更新日時を持つ)
%00000010 (アクセス日時を持つ)
%00000100 (作成日時を持つ)
|
(4) | 更新日時 | 1970年1月1日 0時00分00秒からの経過秒 |
(4) | アクセス日時 | |
(4) | 作成日時 |
dim CRCTable, 256 ;CRCテーブル(演算用固定値テーブル) repeat 256 ib = cnt repeat 8 ib = (ib >> 1 & $7FFFFFFF) ^ ((ib & 1) * $EDB88320) loop CRCTable(cnt) = ib loop dialog "*", 16 : if stat == 0 : stop FileName = refstr exist FileName : FileSize = strsize sdim FileData, FileSize bload FileName, FileData, FileSize CRC32 = $FFFFFFFF ;初期値 repeat FileSize CRC32 = (CRC32 >> 8 & $00FFFFFF) ^ CRCTable(peek(FileData, cnt) ^ (CRC32 & $FF)) loop CRC32 = CRC32 ^ $FFFFFFFF ;ファイル分割ロードのときは、この値を初期値に代入する mes CRC32 ; http://www.tvg.ne.jp/menyukko/ ; Copyright(C) 2011 衣日和 All rights reserved.