ZIP

From Just Solve the File Format Problem
(Difference between revisions)
Jump to: navigation, search
(Links)
(Extensible data fields)
Line 69: Line 69:
 
Most of the extra fields in use are documented in the ZIP "APPNOTE" specification, or by the Info-ZIP software (e.g. the proginfo/extrafld.txt file in the Zip program's source distribution).
 
Most of the extra fields in use are documented in the ZIP "APPNOTE" specification, or by the Info-ZIP software (e.g. the proginfo/extrafld.txt file in the Zip program's source distribution).
  
An example of an extra field is 0x5455, "extended timestamp", which attempts to improve upon ZIP's antiquated [[MS-DOS date/time]] format (and somehow manages to come up short, in that it only works until the year 2038, instead of 2099).
+
=== Known extensible data fields ===
 +
{| class="wikitable"
 +
!ID !! Owner !! Description !! Reference (identification) !! Reference (details)
 +
|-
 +
|0x0001 || PKWARE || Zip64 extended information || APPNOTE || APPNOTE, Info-ZIP
 +
|-
 +
|0x0007 || PKWARE || AV Info || APPNOTE ||
 +
|-
 +
|0x0008 || PKWARE || Reserved for extended language encoding data (PFS) || APPNOTE ||
 +
|-
 +
|0x0009 || PKWARE || OS/2 || APPNOTE || APPNOTE, Info-ZIP
 +
|-
 +
|0x000a || PKWARE || NTFS  || APPNOTE || APPNOTE, Info-ZIP
 +
|-
 +
|0x000c || PKWARE || OpenVMS || APPNOTE || APPNOTE, Info-ZIP
 +
|-
 +
|0x000d || PKWARE || UNIX || APPNOTE || APPNOTE, Info-ZIP
 +
|-
 +
|0x000e || PKWARE || Reserved for file stream and fork descriptors || APPNOTE ||
 +
|-
 +
|0x000f || PKWARE || Patch Descriptor || APPNOTE || APPNOTE, Info-ZIP
 +
|-
 +
|0x0014 || PKWARE || PKCS#7 Store for X.509 Certificates || APPNOTE || APPNOTE, Info-ZIP
 +
|-
 +
|0x0015 || PKWARE || X.509 Certificate ID and Signature for individual file || APPNOTE || APPNOTE, Info-ZIP
 +
|-
 +
|0x0016 || PKWARE || X.509 Certificate ID for Central Directory || APPNOTE || APPNOTE, Info-ZIP
 +
|-
 +
|0x0017 || PKWARE || Strong Encryption Header || APPNOTE || APPNOTE
 +
|-
 +
|0x0018 || PKWARE || Record Management Controls || APPNOTE || APPNOTE
 +
|-
 +
|0x0019 || PKWARE || PKCS#7 Encryption Recipient Certificate List || APPNOTE || APPNOTE
 +
|-
 +
|0x0065 || PKWARE || IBM S/390 (Z390), AS/400 (I400) attributes - uncompressed || APPNOTE ||
 +
|-
 +
|0x0065 || PKWARE || MVS || || APPNOTE
 +
|-
 +
|0x0065 || PKWARE || OS/400 || || APPNOTE
 +
|-
 +
|0x0066 || PKWARE || Reserved for IBM S/390 (Z390), AS/400 (I400) attributes - compressed || APPNOTE ||
 +
|-
 +
|0x07c8 || || Macintosh (Info-ZIP Macintosh, old) || APPNOTE || Info-ZIP
 +
|-
 +
|0x2605 || || ZipIt Macintosh || APPNOTE || APPNOTE, Info-ZIP
 +
|-
 +
|0x2705 || || ZipIt Macintosh 1.3.5+ (w/o full filename) || APPNOTE || APPNOTE, Info-ZIP
 +
|-
 +
|0x2805 || || ZipIt Macintosh 1.3.5+ || APPNOTE || APPNOTE
 +
|-
 +
|0x334d "<code>M3</code>" || || Info-ZIP Macintosh || APPNOTE || Info-ZIP
 +
|-
 +
|0x4154 "<code>TA</code>" || || Tandem NSK || Info-ZIP || Info-ZIP
 +
|-
 +
|0x4341 "<code>AC</code>" || || Acorn/SparkFS || APPNOTE || Info-ZIP
 +
|-
 +
|0x4453 "<code>SE</code>" || || Windows NT security descriptor (binary ACL) || APPNOTE || Info-ZIP
 +
|-
 +
|0x4690 || PKWARE || POSZIP 4690 (reserved) || APPNOTE ||
 +
|-
 +
|0x4704 || || VM/CMS || APPNOTE || Info-ZIP
 +
|-
 +
|0x470f || || MVS || APPNOTE || Info-ZIP
 +
|-
 +
|0x4854 "<code>TH</code>" || || Theos (old) || Info-ZIP || Info-ZIP
 +
|-
 +
|0x4b46 "<code>FK</code>" || || FWKCS MD5 || APPNOTE || APPNOTE, Info-ZIP
 +
|-
 +
|0x4c41 "<code>AL</code>" || || OS/2 access control list (text ACL) || APPNOTE || Info-ZIP
 +
|-
 +
|0x4d49 "<code>IM</code>" || || Info-ZIP OpenVMS || APPNOTE || Info-ZIP
 +
|-
 +
|0x4d63 "<code>cM</code>" || || Macintosh SmartZIP || Info-ZIP || Info-ZIP
 +
|-
 +
|0x4f4c "<code>LO</code>" || || Xceed original location || APPNOTE ||
 +
|-
 +
|0x5350 "<code>PS</code>" || || (Observed in some Psion files.) || ||
 +
|-
 +
|0x5356 "<code>VS</code>" || || AOS/VS (binary ACL) || APPNOTE || Info-ZIP
 +
|-
 +
|0x5455 "<code>UT</code>" || || Extended timestamp || APPNOTE || Info-ZIP
 +
|-
 +
|0x554e "<code>NU</code>" || || Xceed unicode || APPNOTE ||
 +
|-
 +
|0x5855 "<code>UX</code>" || || Info-ZIP UNIX (original, also OS/2, NT, etc.) || APPNOTE || Info-ZIP
 +
|-
 +
|0x6375 "<code>uc</code>" || || Info-ZIP Unicode Comment || APPNOTE || APPNOTE, Info-ZIP
 +
|-
 +
|0x6542 "<code>Be</code>" || || BeOS (BeBox, PowerMac, etc.) || APPNOTE || Info-ZIP
 +
|-
 +
|0x6854 "<code>Th</code>" || || Theos || Info-ZIP || Info-ZIP
 +
|-
 +
|0x7075 "<code>up</code>" || || Info-ZIP Unicode Path || APPNOTE || APPNOTE, Info-ZIP
 +
|-
 +
|0x7441 "<code>At</code>" || || AtheOS || ||
 +
|-
 +
|0x756e "<code>nu</code>" || || ASi UNIX || APPNOTE || Info-ZIP
 +
|-
 +
|0x7855 "<code>Ux</code>" || || Info-ZIP Unix (previous new) || APPNOTE || Info-ZIP
 +
|-
 +
|0x7875 "<code>ux</code>" || || Info-ZIP Unix (new) || Info-ZIP || Info-ZIP
 +
|-
 +
|0xa220 || || Microsoft Open Packaging Growth Hint || APPNOTE || APPNOTE
 +
|-
 +
|0xfb4a || || SMS/QDOS || Info-ZIP || Info-ZIP
 +
|-
 +
|0xfd4a || || SMS/QDOS || APPNOTE ||
 +
|}
  
 
== Specifications ==
 
== Specifications ==

Revision as of 21:16, 18 June 2017

Not to be confused with Zip disk, an unrelated disk cartridge unit.
File Format
Name ZIP
Ontology
Extension(s) .zip
MIME Type(s) application/zip
LoCFDD fdd000354, fdd000355, fdd000362, fdd000361
PRONOM x-fmt/263
UTI com.pkware.zip-archive
Released 1989

ZIP is one of the most popular file compression formats. It was created in 1989 as the native format of the PKZIP program, which was introduced by Phil Katz in the wake of a lawsuit (which he lost) against him by the makers of the then-popular ARC program (and file format) for copyright and trademark infringement in an earlier program PKARC which had been file-compatible with ARC. This resulted in Katz creating a new file format, which rapidly overtook ARC in popularity (to a large extent because of BBS sysops, then the primary users of such compression, resenting the lawsuit). Many programs have been released for a variety of operating systems to compress and decompress ZIP files, and native support for the format is built into several popular operating systems.

ZIP implementations vary in their support for features in the specification from PKWARE[1], particularly features added since version 2 (1993), some of which are protected by patents and require licensing. Many implementations limit the use of compression to the DEFLATE algorithm, introduced with version 2. Extensions incorporated into the specification that have been widely adopted are: long filenames; large files (using a technique known as ZIP64); and filenames in UTF-8. In 2011 work began on an interoperable subset of the latest APPNOTE.TXT with the intention of publication as ISO/IEC 21320-1, Document Container File -- Part 1: Core. As of November 2012, a discussion draft is available[2]. Designed to promote interoperable implementations, the draft ISO/IEC 21320-1 prohibits compression other than using DEFLATE, segmentation or multiple volumes, and features that are subject to patents.

While .zip is the usual file extension, ZIP-formatted files can be found with many other extensions since a number of other file formats use ZIP compression but store their files in application-specific extensions. See Category:ZIP based file formats for a list of such formats.

Contents

See also

Identification

The byte sequence 'P' 'K' 0x05 0x06 (the "end of central directory signature") appears somewhere in the file, usually beginning exactly 22 bytes from the end of the file. However, it will appear earlier if the file contains a "ZIP file comment" (common in the BBS era, but rare today), or for various other reasons. There seems to be no theoretical limit to how far back you may have to search for the signature, but some software limits it to around 64KB, which is the maximum length of a comment.

Most ZIP files (but not self-extracting ZIP files) happen to begin with 'P' 'K' 0x03 0x04. This is not a global file signature, but is the signature that appears once for every compressed file inside the ZIP file. Some ZIP-based formats are designed such that they necessarily begin in this way. But in general, it is even legal for a ZIP file to contain zero files, and such a ZIP file would not contain this signature at all.

Compression

Each file in a ZIP file is compressed using one of a number of compression algorithms. Only compression types 0 (uncompressed) and 8 (DEFLATE) are likely to be seen in modern portable ZIP files. In old ZIP files, types 1 (Shrink) and 6 (Implode) are common.

Code Compression scheme Notes and references
0 Uncompressed
1 Shrink (LZW) Used by PKZIP prior to v2.0.
2–5 Reduce Used by PKZIP v0.x.
6 Implode (Shannon–Fano coding) Used by PKZIP v1.x. See also TTComp archive.
8 DEFLATE Used by PKZIP v2.0+.
9 Deflate64, a.k.a. Enhanced Deflate Defined in ZIP specification v2.1+.
10 PKWARE Data Compression Library Imploding (old IBM TERSE)
12 Bzip2 Defined in ZIP specification v4.6+.
14 LZMA (EFS) Defined in ZIP specification v6.3+.
18 IBM TERSE (new)
19 IBM LZ77 z Architecture (PFS)
96 (JPEG, according to WinZip)
97 WavPack Defined in ZIP specification v6.3.2+.
98 PPMd version I, Rev 1 Defined in ZIP specification v6.3+.
99 (AES encryption, according to WinZip)

Extensible data fields

Each member file of a ZIP file may have one or more extensible data fields (or extra fields), containing arbitrary data. Each field is tagged with a 16-bit identifier. Extra fields are normally used for platform-specific or filesystem-specific metadata, or to work around limitations of the original ZIP format. They are not normally used for application-specific data.

Most of the extra fields in use are documented in the ZIP "APPNOTE" specification, or by the Info-ZIP software (e.g. the proginfo/extrafld.txt file in the Zip program's source distribution).

Known extensible data fields

ID Owner Description Reference (identification) Reference (details)
0x0001 PKWARE Zip64 extended information APPNOTE APPNOTE, Info-ZIP
0x0007 PKWARE AV Info APPNOTE
0x0008 PKWARE Reserved for extended language encoding data (PFS) APPNOTE
0x0009 PKWARE OS/2 APPNOTE APPNOTE, Info-ZIP
0x000a PKWARE NTFS APPNOTE APPNOTE, Info-ZIP
0x000c PKWARE OpenVMS APPNOTE APPNOTE, Info-ZIP
0x000d PKWARE UNIX APPNOTE APPNOTE, Info-ZIP
0x000e PKWARE Reserved for file stream and fork descriptors APPNOTE
0x000f PKWARE Patch Descriptor APPNOTE APPNOTE, Info-ZIP
0x0014 PKWARE PKCS#7 Store for X.509 Certificates APPNOTE APPNOTE, Info-ZIP
0x0015 PKWARE X.509 Certificate ID and Signature for individual file APPNOTE APPNOTE, Info-ZIP
0x0016 PKWARE X.509 Certificate ID for Central Directory APPNOTE APPNOTE, Info-ZIP
0x0017 PKWARE Strong Encryption Header APPNOTE APPNOTE
0x0018 PKWARE Record Management Controls APPNOTE APPNOTE
0x0019 PKWARE PKCS#7 Encryption Recipient Certificate List APPNOTE APPNOTE
0x0065 PKWARE IBM S/390 (Z390), AS/400 (I400) attributes - uncompressed APPNOTE
0x0065 PKWARE MVS APPNOTE
0x0065 PKWARE OS/400 APPNOTE
0x0066 PKWARE Reserved for IBM S/390 (Z390), AS/400 (I400) attributes - compressed APPNOTE
0x07c8 Macintosh (Info-ZIP Macintosh, old) APPNOTE Info-ZIP
0x2605 ZipIt Macintosh APPNOTE APPNOTE, Info-ZIP
0x2705 ZipIt Macintosh 1.3.5+ (w/o full filename) APPNOTE APPNOTE, Info-ZIP
0x2805 ZipIt Macintosh 1.3.5+ APPNOTE APPNOTE
0x334d "M3" Info-ZIP Macintosh APPNOTE Info-ZIP
0x4154 "TA" Tandem NSK Info-ZIP Info-ZIP
0x4341 "AC" Acorn/SparkFS APPNOTE Info-ZIP
0x4453 "SE" Windows NT security descriptor (binary ACL) APPNOTE Info-ZIP
0x4690 PKWARE POSZIP 4690 (reserved) APPNOTE
0x4704 VM/CMS APPNOTE Info-ZIP
0x470f MVS APPNOTE Info-ZIP
0x4854 "TH" Theos (old) Info-ZIP Info-ZIP
0x4b46 "FK" FWKCS MD5 APPNOTE APPNOTE, Info-ZIP
0x4c41 "AL" OS/2 access control list (text ACL) APPNOTE Info-ZIP
0x4d49 "IM" Info-ZIP OpenVMS APPNOTE Info-ZIP
0x4d63 "cM" Macintosh SmartZIP Info-ZIP Info-ZIP
0x4f4c "LO" Xceed original location APPNOTE
0x5350 "PS" (Observed in some Psion files.)
0x5356 "VS" AOS/VS (binary ACL) APPNOTE Info-ZIP
0x5455 "UT" Extended timestamp APPNOTE Info-ZIP
0x554e "NU" Xceed unicode APPNOTE
0x5855 "UX" Info-ZIP UNIX (original, also OS/2, NT, etc.) APPNOTE Info-ZIP
0x6375 "uc" Info-ZIP Unicode Comment APPNOTE APPNOTE, Info-ZIP
0x6542 "Be" BeOS (BeBox, PowerMac, etc.) APPNOTE Info-ZIP
0x6854 "Th" Theos Info-ZIP Info-ZIP
0x7075 "up" Info-ZIP Unicode Path APPNOTE APPNOTE, Info-ZIP
0x7441 "At" AtheOS
0x756e "nu" ASi UNIX APPNOTE Info-ZIP
0x7855 "Ux" Info-ZIP Unix (previous new) APPNOTE Info-ZIP
0x7875 "ux" Info-ZIP Unix (new) Info-ZIP Info-ZIP
0xa220 Microsoft Open Packaging Growth Hint APPNOTE APPNOTE
0xfb4a SMS/QDOS Info-ZIP Info-ZIP
0xfd4a SMS/QDOS APPNOTE

Specifications

Metaformat files

Software

Sample files

  • 1608A.ZIP → D1-MAC.ZIP: Example of a file that uses the uncommon "Reduce" compression scheme

References

  1. http://www.pkware.com/documents/casestudies/APPNOTE.TXT
  2. http://kikaku.itscj.ipsj.or.jp/sc34/open/1855.pdf

Links

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox