Hva er en ZIP-fil?
En fil med filtypen .zip er et arkiv som kan inneholde én eller flere filer eller kataloger. Arkivet kan ha komprimering brukt på de inkluderte filene for å redusere ZIP-filstørrelsen. ZIP-filformatet ble offentliggjort tilbake i februar 1989 av Phil Katz for å oppnå arkivering av filer og mapper. Formatet ble gjort til en del av PKZIP-verktøyet, laget av PKWARE, Inc. Rett etter tilgjengeligheten av [tilgjengelige spesifikasjoner](https://pkware.cachefly.net/ webdocs/casestudies/APPNOTE.TXT), gjorde mange selskaper ZIP-filformat til en del av programvareverktøyene, inkludert Microsoft (siden Windows 7), Apple (Mac OS X) og mange andre.
Kort historie om ZIP-filformat
Historien til ZIP-filformatet dateres tilbake til tilfellet av en rettssak utstedt av System Enhancement Associates (SEA) mot PKWARE for bruk av ARC-verktøyet uten tillatelser for dets varemerke og opphavsretten til produktets utseende og brukergrensesnitt. Før dette hadde Phil Katz skrevet om SEAs kildekode og gitt ut PKXARC, en ARC-ekstraktor, og PKARC, en filkompressor, som freeware for MS-DOS-baserte systemer. PKWARE tapte for søksmålet, og kunne ikke lenger bruke noe relatert til ARC. Det var her etableringen av en ny filkomprimering ble til, kalt ZIP som ble gjort til en del av PKZIP-verktøyet hos PKWARE, Inc.
Katz ga ut ZIP-filformatspesifikasjonene til det offentlige domenet, mens han beholdt eiendomsrettighetene over komprimerings- og utvinningsverktøyet, det vil si PKZIP.ZIP-komprimeringssystemet var (og er) i stand til å arkivere filer i en mappe ved hjelp av en 32-bits syklisk redundanssjekk (CRC) algoritme for å komprimere fil størrelser. I motsetning til ARC, inkluderte .ZIP-mapper en katalogfil som spilte rollen som en kryptografs kodebok, som inneholdt informasjonen som er nødvendig for å gjengi de komprimerte filene.
Støttede komprimeringsmetoder i ZIP
I henhold til spesifikasjonene for .ZIP-filformat, støttes følgende komprimeringsmetoder.
- Store - innebærer ingen komprimering
- Krympe
- Reduksjon (Dette innebærer kompresjonsfaktorer fra nivå 1 til nivå 4)
- Implodere
- Tøm luften
- Deflat64
- BZIP2
- LZMA (EFS)
- WavPack
- PPMd versjon I, Rev 1
DEFLATE er den ofte brukte komprimeringsmetoden som er en tapsfri datokomprimeringsalgoritme som bruker en kombinasjon av LZ77 og Huffman-koding og er beskrevet i RFC 1951.
Spesifikasjoner for ZIP-filformat
ZIP-filer har mulighet til å lagre flere filer ved hjelp av forskjellige komprimeringsteknikker, samtidig som de støtter lagring av en fil uten komprimering. Hver fil lagres/komprimeres individuelt, noe som hjelper til med å pakke dem ut, eller legge til nye, uten å bruke komprimering eller dekomprimering på hele arkivet.
Total ZIP-filformat
Hver Zip-fil er strukturert på følgende måte:
ZIP File format |
---|
Local File Header 1 |
File Data 1 |
Data Descriptor 1 |
Local File Header 2 |
File Data 2 |
Data Descriptor 2 |
…. |
…. |
Local File Header N |
File Data N |
Data Descriptor N |
Archive Decryption Header |
Archive Extra Data Record |
Central Directory |
ZIP-filformatet bruker 32-biters CRC-algoritme for arkivering. For å gjengi de komprimerte filene, har et ZIP-arkiv en katalog i enden som holder oppføringen av de inneholdte filene og deres plassering i arkivfilen. Den spiller derfor rollen som koding for å kapsle inn informasjon som er nødvendig for å gjengi de komprimerte filene. ZIP-lesere bruker katalogen til å laste inn listen over filer uten å lese hele ZIP-arkivet. Formatet beholder to kopier av katalogstrukturen for å gi større beskyttelse mot tap av data.
Hver fil i et ZIP-arkiv er representert som en individuell oppføring der hver oppføring består av en lokal filoverskrift etterfulgt av de komprimerte fildataene. Katalogen på slutten av arkivet inneholder referansene til alle disse filoppføringene. ZIP-fillesere bør unngå å lese de lokale filoverskriftene, og alle slags filoppføringer bør leses fra katalogen. Denne katalogen er den eneste kilden for gyldige filoppføringer i arkivet, da filer også kan legges til mot slutten av arkivet. Det er grunnen til at hvis en leser leser lokale overskrifter i et ZIP-arkiv fra begynnelsen, kan den lese ugyldige (slettede) oppføringer i tillegg til at de ikke er en del av katalogen som slettes fra arkivet.
Rekkefølgen på filoppføringene i den sentrale katalogen trenger ikke være sammenfallende med rekkefølgen på filoppføringene i arkivet.
ZIP-filoppføringer
Oppføringer i ZIP-filen er ordnet etter hverandre, der hver oppføring består av:
- Lokal filoverskrift
- Valgfrie ekstra datafelt
- Brukerdata (valgfritt komprimert/valgfritt kryptert)
Den lokale filoverskriften for hver oppføring representerer informasjon om filen som kommentar, filstørrelse og filnavn. De ekstra datafeltene (valgfritt) kan romme informasjon for utvidelsesmuligheter for ZIP-formatet.
Lokal filoverskrift
Den lokale filoverskriften har en spesifikk feltstruktur som består av multibyte-verdier. Alle verdiene er lagret i little-endian byte-rekkefølge hvor feltlengden teller lengden i byte. Alle strukturene i en ZIP-fil bruker 4-byte signaturer for hver filoppføring.Slutten av den sentrale katalogsignaturen er 0x06054b50 og kan skilles fra ved hjelp av sin egen unike signatur. Følgende er rekkefølgen på informasjon som er lagret i lokal filoverskrift.
Offset | Bytes | Description |
---|---|---|
0 | 4 | Local file header signature # 0x04034b50 (read as a little-endian number) |
4 | 2 | Version needed to extract (minimum) |
6 | 2 | General purpose bit flag |
8 | 2 | Compression method |
10 | 2 | File last modification time |
12 | 2 | File last modification date |
14 | 4 | CRC-32 |
18 | 4 | Compressed size |
22 | 4 | Uncompressed size |
26 | 2 | File name length (n) |
28 | 2 | Extra field length (m) |
30 | n | File Name |
30+n | m | Extra Field |
Central Directory File Header
Offset | Bytes | Description |
---|---|---|
0 | 4 | Central directory file header signature # 0x02014b50 |
4 | 2 | Version made by |
6 | 2 | Version needed to extract (minimum) |
8 | 2 | General purpose bit flag |
10 | 2 | Compression method |
12 | 2 | File last modification time |
14 | 2 | File last modification date |
16 | 4 | CRC-32 |
20 | 4 | Compressed size |
24 | 4 | Uncompressed size |
28 | 2 | File name length (n) |
30 | 2 | Extra field length (m) |
32 | 2 | File comment length (k) |
34 | 2 | Disk number where file starts |
36 | 2 | Internal file attributes |
38 | 4 | External file attributes |
42 | 4 | Relative offset of local file header. This is the number of bytes between the start of the first disk on which the file occurs, and the start of the local file header. This allows software reading the central directory to locate the position of the file inside the ZIP file. |
46 | n | File name |
46+n | m | Extra field |
46+n+m | k | File comment |
Slutt på sentralkatalogpost
Offset | Bytes | Description |
---|---|---|
0 | 4 | End of central directory signature # 0x06054b50 |
4 | 2 | Number of this disk |
6 | 2 | Disk where central directory starts |
8 | 2 | Number of central directory records on this disk |
10 | 2 | Total number of central directory records |
12 | 4 | Size of central directory (bytes) |
16 | 4 | Offset of start of central directory, relative to start of archive |
20 | 2 | Comment length (n) |
22 | n | Comment |