aspose.info
NL

ZIP

Bijgewerkt

Wat is een ZIP-bestand?

Een bestand met de extensie .zip is een archief dat een of meer bestanden of mappen kan bevatten. Het archief kan compressie hebben toegepast op de opgenomen bestanden om de ZIP-bestandsgrootte te verkleinen. Het ZIP-bestandsformaat werd in februari 1989 openbaar gemaakt door Phil Katz voor het archiveren van bestanden en mappen. Het formaat is onderdeel gemaakt van het hulpprogramma PKZIP, gemaakt door PKWARE, Inc. Direct na de beschikbaarheid van beschikbare specificaties, maakten veel bedrijven het ZIP-bestandsformaat onderdeel van hun softwarehulpprogramma’s, waaronder Microsoft (sinds Windows 7), Apple (Mac OS X) en vele anderen.

Korte geschiedenis van ZIP-bestandsindeling

De geschiedenis van het ZIP-bestandsformaat gaat terug tot het geval van een rechtszaak die werd aangespannen door System Enhancement Associates (SEA) tegen PKWARE voor het gebruik van het ARC-hulpprogramma zonder toestemming voor zijn handelsmerk en de auteursrechten van het uiterlijk en de gebruikersinterface van het product. Daarvoor had Phil Katz de broncode van SEA herschreven en PKXARC, een ARC-extractor, en PKARC, een bestandscompressor, uitgebracht als freeware voor op MS-DOS gebaseerde systemen. PKWARE verloor van de rechtszaak en kon niets meer gebruiken dat met ARC te maken had. Dit is waar de creatie van een nieuwe bestandscompressie tot stand kwam, genaamd ZIP, die onderdeel werd van het PKZIP-hulpprogramma bij PKWARE, Inc.

Katz heeft de specificaties van het ZIP-bestandsformaat vrijgegeven in het publieke domein, met behoud van de eigendomsrechten op zijn compressie- en extractiehulpprogramma, namelijk PKZIP. Het ZIP-compressiesysteem was (en is) in staat om bestanden in een map te archiveren door middel van een 32-bits cyclische redundantiecontrole (CRC) algoritme om het bestand te comprimeren maten. In tegenstelling tot ARC bevatten .ZIP-mappen een directorybestand dat de rol speelde van het codeboek van een cryptograaf, met de informatie die nodig is om de gecomprimeerde bestanden weer te geven.

Ondersteunde compressiemethoden in ZIP

Volgens de specificaties van de .ZIP-bestandsindeling worden de volgende compressiemethoden ondersteund.

  • Opslaan - impliceert geen compressie
  • Krimpen
  • Reductie (Dit impliceert compressiefactoren variërend van niveau 1 tot niveau 4)
  • Imploderen
  • Leeglopen
  • Deflat64 *BZIP2
  • LZMA (EFS)
  • WavPack
  • PPMd versie I, Rev 1

DEFLATE is de veelgebruikte compressiemethode, een lossless datumcompressiealgoritme dat een combinatie van de LZ77- en Huffman-codering gebruikt en wordt beschreven in RFC 1951.

Specificaties ZIP-bestandsindeling

ZIP-bestanden hebben de mogelijkheid om meerdere bestanden op te slaan met behulp van verschillende compressietechnieken en ondersteunen tegelijkertijd het opslaan van een bestand zonder enige compressie. Elk bestand wordt afzonderlijk opgeslagen/gecomprimeerd, wat helpt om ze uit te pakken of nieuwe toe te voegen, zonder compressie of decompressie toe te passen op het hele archief.

Algemeen ZIP-bestandsformaat

Elk zip-bestand is als volgt gestructureerd:

ZIP-bestandsindeling
Lokale bestandskop 1
Bestandsgegevens 1
Gegevensbeschrijving 1
Lokale bestandskop 2
Bestandsgegevens 2
Gegevensbeschrijving 2
….
….
Lokale bestandskop N
Bestandsgegevens nr
Gegevensbeschrijving nr
Archief decoderingskoptekst
Archief extra gegevensrecord
Centraal telefoonboek

ZIP-bestandsindeling gebruikt een 32-bits CRC-algoritme voor archiveringsdoeleinden. Om de gecomprimeerde bestanden weer te geven, bevat een ZIP-archief een map aan het einde die de vermelding van de ingesloten bestanden en hun locatie in het archiefbestand bewaart. Het speelt dus de rol van codering voor het inkapselen van informatie die nodig is om de gecomprimeerde bestanden weer te geven. ZIP-lezers gebruiken de map om de lijst met bestanden te laden zonder het hele ZIP-archief te lezen. Het formaat bewaart dubbele kopieën van de directorystructuur om een betere bescherming te bieden tegen gegevensverlies.

Elk bestand in een ZIP-archief wordt weergegeven als een afzonderlijk item waarbij elk item bestaat uit een Local File Header gevolgd door de gecomprimeerde bestandsgegevens. De directory aan het einde van het archief bevat de verwijzingen naar al deze bestandsitems. ZIP-bestandslezers moeten het lezen van de lokale bestandsheaders vermijden en alle soorten bestandslijsten moeten uit de directory worden gelezen. Deze directory is de enige bron voor geldige bestandsinvoer in het archief, aangezien bestanden ook tegen het einde van het archief kunnen worden toegevoegd. Dat is de reden waarom als een lezer vanaf het begin lokale headers van een ZIP-archief leest, deze ongeldige (verwijderde) vermeldingen ook kan lezen die geen deel uitmaken van de directory die uit het archief wordt verwijderd.

De volgorde van de bestandsitems in de centrale directory hoeft niet samen te vallen met de volgorde van de bestandsitems in het archief.

ZIP-bestandsvermeldingen

De vermeldingen in het ZIP-bestand zijn achter elkaar gerangschikt, waarbij elke vermelding bestaat uit:

  • Lokale bestandskop
  • Optionele extra gegevensvelden
  • Gebruikersgegevens (optioneel gecomprimeerd/optioneel versleuteld)

De lokale bestandskop van elk item vertegenwoordigt informatie over het bestand, zoals commentaar, bestandsgrootte en bestandsnaam. De extra gegevensvelden (optioneel) kunnen informatie bevatten voor uitbreidbaarheidsopties van het ZIP-formaat.

Lokale bestandskop

De Local File Header heeft een specifieke veldstructuur die bestaat uit waarden van meerdere bytes. Alle waarden worden opgeslagen in little-endian bytevolgorde waarbij de veldlengte de lengte in bytes telt. Alle structuren in een ZIP-bestand gebruiken handtekeningen van 4 bytes voor elke bestandsinvoer. Het einde van de handtekening van de centrale directory is 0x06054b50 en kan worden onderscheiden met behulp van zijn eigen unieke handtekening. Hieronder volgt de volgorde van de informatie die is opgeslagen in Local File Header.

OffsetBytesBeschrijving
04Lokale bestandskophandtekening # 0x04034b50 (lees als een little-endian-nummer)
42Versie nodig om te extraheren (minimaal)
62Bitvlag voor algemeen gebruik
82Compressiemethode
102Laatste wijzigingstijd ingeven
122Laatste wijzigingsdatum invullen
144CRC-32
184Gecomprimeerde grootte
224Ongecomprimeerde grootte
262Bestandsnaam lengte (n)
282Extra veldlengte (m)
30nBestandsnaam
30+nmExtra veld

Centrale map Bestandskop

OffsetBytesBeschrijving
04Centrale directory bestandsheader handtekening # 0x02014b50
42Versie gemaakt door
62Versie nodig om te extraheren (minimaal)
82Bitvlag voor algemeen gebruik
102Compressiemethode
122Laatste wijzigingstijd ingeven
142Laatste wijzigingsdatum invullen
164CRC-32
204Gecomprimeerde grootte
244Ongecomprimeerde grootte
282Bestandsnaam lengte (n)
302Extra veldlengte (m)
322Lengte van bestandscommentaar (k)
342Schijfnummer waar het bestand begint
362Interne bestandskenmerken
384Externe bestandskenmerken
424Relatieve offset van lokale bestandskop. Dit is het aantal bytes tussen het begin van de eerste schijf waarop het bestand voorkomt en het begin van de lokale bestandskop. Hierdoor kan software de centrale directory lezen om de positie van het bestand in het ZIP-bestand te lokaliseren.
46nBestandsnaam
46+nmExtra veld
46+n+mkBestand toevoegen

Einde van centraal telefoonboekrecord

OffsetBytesBeschrijving
04Einde van handtekening centrale directory # 0x06054b50
42Nummer van deze schijf
62Schijf waar de centrale directory begint
82Aantal centrale directory-records op deze schijf
102Totaal aantal centrale telefoonboekrecords
124Grootte van centrale directory (bytes)
164Verschuiving van begin van centrale directory, ten opzichte van begin van archief
202Commentaar lengte (n)
22nCommentaar

Referenties

Zie ook