반응형
ZIP 파일 헤더 구조
zip 파일 확장자 명 : .zip 또는 .ZIP
MIME media type : application/zip
zip 파일 내에 파일/폴더를 각각 압축하는 구조여서 압축 후에 파일을 추가하여서 압축할 수 있는 구조.
값은 리틀엔디안으로 읽어야 한다!
ZIP파일 헤더 구조
[ZIP 파일 구조]
Local file Header 1 |
File data1 |
Data description 1 |
Local file Header 2 |
File data 2 |
Data description 2 |
... |
Local file Header n |
File data n |
Data description n |
Archive decryption Header |
Archive extra data Record |
Central Directory |
1. Local File Header
Offset | Byte | Description |
0 | 4 | 로컬 파일 헤더 고유 값 = 0x04034b50 (PK) - 리틀엔디안으로 읽어야함. |
4 | 2 | 압축 해제할 때 필요 버전 |
6 | 2 | 일반적인 목적의 bit당 플래그 |
ex) 위 파일에서 해당 값이 09 08 이면, 리틀엔티안으로 읽으면 08 09 > 00001000 00001001 = encrypted file, data descriptor, language encoding --- 00000000 00000000 구조에서 각 bit당 가르키는 플래그 값이다 Bits 00 : encrypted file Bits 01 : compression option Bits 02 : compression option Bits 03 : data descriptor Bits 04 : enhanced deflation Bits 05 : compressed patched data Bits 06 : strong encryption Bits 07-0x10 : unused Bits 11 : language encoding Bits 12 : reserved Bits 13 : mask header values Bits 14-15 : reserved |
||
8 | 2 | 압축 방식 |
0x00 : no compression 0x01 : shrunk 0x02 : reduced with compression factor 1 0x03 : reduced with compression factor 2 0x04 : reduced with compression factor 3 0x05 : reduced with compression factor 4 0x06 : imploded 0x07 : reserved 0x08 : deflated (제일 많이 사용) 0x09 : enhanced deflated 0x0A : PKWare DCL imploded 0x0B : reserved 0x0C : compressed using BZIP2 0x0D : reserved 0x0E : LZMA 0x0F-0x11 : reserved 0x12 : compressed using IBM TERSE 0x13 : IBM LZ77 z 0x62 : PPMd version I, Rev 1 |
||
10 | 2 | 마지막으로 파일이 변경된 시간 Bits 00-04: seconds divided by 2 Bits 05-10: minute Bits 11-15: hour |
12 | 2 | 마지막으로 파일이 변경된 날짜 Bits 00-04: day Bits 05-08: month Bits 09-15: years from 1980 |
14 | 4 | 압축되지 않은 데이터의 CRC-32 |
18 | 4 | 압축된 사이즈 (또는 ZIP64를 위한 0xffffffff) |
22 | 4 | 압축하지 않았을 때 사이즈 (또는 ZIP64를 위한 0xffffffff) |
26 | 2 | 파일 이름 길이 (n) |
28 | 2 | 추가 필드 길이 (m) |
30 | n | 파일 이름 |
30+n | m | 추가 필드 |
2. Central directory file header
offset | Bytes | Description |
0 | 4 | Cetral Directory 헤더 고유 값 = 0x02014b50 |
4 | 2 | 만들어진 버전 |
6 | 2 | 압축을 풀기위해 필요한 버전 |
8 | 2 | 일반적인 목적의 bit 플래그 * Local File Header와 동일 |
10 | 2 | 압축 방식 * Local File Header와 동일 |
12 | 2 | 마지막으로 파일이 변경된 시간 * Local File Header와 동일 |
14 | 2 | 마지막으로 파일이 변경된 날짜 * Local File Header와 동일 |
16 | 4 | 압축되지 않은 데이터의 CRC-32 |
20 | 4 | 압축된 사이즈 (또는 ZIP64를 위한 0xffffffff) |
24 | 4 | 압축하지 않았을 때 사이즈 (또는 ZIP64를 위한 0xffffffff) |
28 | 2 | 파일 이름 길이 (n) |
30 | 2 | 추가 필드 길이 (m) |
32 | 2 | 파일 코멘트 길이 (k) |
34 | 2 | 파일이 시작되는 디스크 번호 |
36 | 2 | 내부 파일 특성 |
Bit 0: apparent ASCII/text file Bit 1: reserved Bit 2: control field records precede logical records Bits 3-16: unused |
||
38 | 4 | 외부 파일 특성 |
42 | 4 | local header의 상대적인 offset 이것은 파일이 발생한 첫 번째 디스크의 시작과 로컬 파일 헤더의 시작 사이의 바이트 수입니다. 이렇게 하면 중앙 디렉토리를 읽는 소프트웨어가 ZIP 파일 내부의 파일 위치를 찾을 수 있습니다. |
46 | n | 파일 이름 |
46+n | m | 추가 필드 |
46+n+m | k | 파일 코멘트 |
3. End of central directory record (EOCD).
Offset | Bytes | Description |
0 | 4 | Central Directory 의 끝 고유 값 = 0x06054b50 |
4 | 2 | 파일이 시작되는 디스크 번호 (또는 ZIP64를 위한 0xffffffff) |
6 | 2 | Central Directory가 시작되는 디스크 |
8 | 2 | 이 디스크에서 Central Directory 레코드의 번호 |
10 | 2 | Central Directory 레코드 총 개수 |
12 | 4 | Central Directory의 사이즈(bytes단위) |
16 | 4 | 아카이브 시작 위치에서 상대적인 Central Directoy의 시작 위치의 offset, |
20 | 2 | Comment 길이 (n) |
22 | n | Comment |
[ 연습 ]
* 노란 부분이 Local file Header, 초록색 부분이 Central directory file header, 파란부분이 End of central directory record
[ 출처 및 참조 ]
1. http://downrg.com/2009/07/31/zip-%EC%95%95%EC%B6%95%ED%8C%8C%EC%9D%BC-header-%EA%B5%AC%EC%A1%B0/
반응형