DasZIP-Dateiformat (vonenglischzipper ‚Reißverschluss‘) ist ein Format für verlustfreikomprimierte Dateien, das einerseits den Platzbedarf bei der Archivierung reduziert und andererseits alsContainerdatei fungiert, in der mehrere zusammengehörige Dateien oder auch ganze Verzeichnisbäume zusammengefasst werden können.Die Dateiendung für zip-archivierte Dateien ist.zip. DerMIME-Typ istapplication/zip.[1]
Das ZIP-Format wurde ursprünglich 1989 mit den ProgrammenPKZIP (komprimieren) und PKUNZIP (dekomprimieren) vom US-AmerikanerPhil Katz entwickelt und hat in der Zwischenzeit einige Erweiterungen erfahren. Katz hatte ursprünglich ein anderes Dateiformat (ARC) benutzt. Dieses Format war vonSoftware Enhancements Associates (SEA) entwickelt worden und wurde alsShareware vertrieben. Katz schrieb eine eigene, deutlich schnellere Version dieser Software und verbreitete sie alsPKARC. Als ihn daraufhin SEA verklagte, zog er PKARC zurück und entwickelte stattdessen PKZIP, das einen effizienterenAlgorithmus benutzte. Durch die schnelle Verbreitung von PKZIP wurden SEA und ARC bedeutungslos.
Seit 2015 ist ZIP auch als ISO/IEC 21320-1:2015 standardisiert.[2]
Das ZIP-Format ist zunächst ein Datencontainer, in den mehrere Dateien komprimiert oder unkomprimiert gespeichert und auch einzeln entkomprimiert (extrahiert) werden können. Darüber hinaus ermöglicht das Format auch das Mitspeichern des dazugehörigen Speicherort-Pfads. Auch eineVerschlüsselung der ansonsten lediglich komprimierten Dateien mit einemPasswort ist möglich.
Das ZIP-Format unterstützt keineprogressive Kompression (auchenglischsolid genannt), die Dateien werden einzeln komprimiert. Das ermöglicht einerseits eine flexible Handhabung (Löschen/Hinzufügen von Dateien aus dem Archiv, ohne alles neu komprimieren zu müssen; Extraktion einzelner Dateien ohne vorangehende Dateien dekomprimieren zu müssen), hat aber den Nachteil, dass Redundanzen zwischen den Dateien bei der Komprimierung nicht berücksichtigt werden können.Dieser Nachteil kann umgangen werden, indem die Dateien zunächst unkomprimiert archiviert werden und die so erzeugte Zip-Datei in eine weitere komprimiert gespeichert wird (meist nur bei sehr vielen gleichartigen Dateien sinnvoll).
Die Dateien sind als Dateieinträge (englischfile entries) in beliebiger Reihenfolge gespeichert. Die Dateieinträge beginnen alle mit einem lokalen Dateikopf (englischlocal header), der den Dateieintrag beschreibt und den Datenabschnitt mit den effektiven Inhalten einleitet. Um die Handhabung dieser beliebig angeordneten Einträge zu gewährleisten, befindet sich am Ende der Zip-Datei jeweils ein zentrales Verzeichnis (englischcentral directory), welches sämtliche Dateieinträge anhand der lokalen Dateiköpfe referenziert. Die Reihenfolge der Dateieinträge und der entsprechenden Referenzen im zentralen Verzeichnis können sich voneinander unterscheiden. Es handelt sich also um eine nicht-sequenzielle Struktur, die am besten mit dem Konzept deswahlfreien Zugriffs (englischrandom access) beschrieben werden kann.
Dieses nicht-sequenzielle Format bewirkt andererseits aber auch, dass, im Gegensatz zum seit 1977 üblichen und seit 1988 standardisiertenTar-Format, unvollständige oder im hinteren Teil defekte Archive gar nicht entpackt werden können.
Es ist weiterhin möglich, das Archiv auf mehrere Dateien zu verteilen (zum Beispiel um große Dateien in Stücke zu teilen, die jeweils auf eine CD oder DVD passen).
Eine ZIP-Datei wird korrekt durch das Vorhandensein eines Eintrags am Ende des zentralenDateiverzeichnisses identifiziert, der sich am Ende der Archivstruktur befindet, um das einfache Anhängen neuerDateien zu ermöglichen. Wenn der Eintrag am Ende des zentralen Verzeichnisses ein nicht leeres Archiv anzeigt, sollte der Name jeder Datei oder jedes Verzeichnisses innerhalb des Archivs in einem Eintrag im zentralen Verzeichnis angegeben werden, zusammen mit anderen Metadaten über den Eintrag und einem Offset in der ZIP-Datei, der auf die tatsächlichen Eintragsdaten verweist.
Dadurch kann eine Auflistung der Dateien eines ZIP-Archivs relativ schnell durchgeführt werden, da nicht das gesamte Archiv gelesen werden muss, um die Dateiliste anzuzeigen. Die Einträge in der ZIP-Datei enthalten diese Informationen aus Redundanzgründen auch in einem lokalenDateikopf (engl.file header). Weil an ZIP-Dateien komprimierte Daten angehängt werden können, sind nur Dateien gültig, die im zentralen Verzeichnis am Ende der Datei angegeben sind. Das Scannen einer ZIP-Datei nach lokalen Dateiköpfen ist außer im Fall beschädigter Archive ungültig, weil das zentraleArchivverzeichnis erklären kann, dass einige Dateien gelöscht und andere Dateien aktualisiert wurden.
Beispiel
Beginnen wir mit einer ZIP-Datei, die die Dateien A, B und C enthält. Erst wird Datei B gelöscht und dann gelöscht und dann wird C aktualisiert. Dies kann erreicht werden, indem einfach eine neue Datei C an das Ende der ursprünglichen ZIP-Datei angehängt und ein neues zentralesDateiverzeichnis hinzugefügt wird, das nur Datei A und die neue Datei C auflistet.
Die Reihenfolge der Dateieinträge im zentralen Verzeichnis muss nicht mit der Reihenfolge der Dateieinträge im Archiv übereinstimmen. Jeder in einem ZIP-Archiv gespeicherte Eintrag wird durch einen lokalen Dateikopf mit Informationen über die Datei wie Kommentar, Dateigröße und Dateiname eingeleitet, gefolgt von optionalen zusätzlichen Datenfeldern und dann den möglicherweise komprimierten, möglicherweise verschlüsselten Dateidaten. Die zusätzlichen Datenfelder sind der Schlüssel zur Erweiterbarkeit des ZIP-Formats. Zusätzliche Felder werden genutzt, um das ZIP64-Format, mitWinZip kompatible Verschlüsselung nach demAdvanced Encryption Standard (AES), Dateiattribute und höher aufgelösteNTFS- oderUnix-Dateizeitstempel zu unterstützen. Andere Erweiterungen sind über das zusätzliche Feld möglich.
Software, die ZIP-Archive lesen, erzeugen oder verändern kann, muss gemäß der Spezifikation zusätzliche Felder ignorieren, die sie nicht erkennen. Das ZIP-Format verwendet spezifische 4-Byte-Signaturen, um die verschiedenen Strukturen in der Datei zu kennzeichnen. Jeder Dateieintrag ist durch eine spezifische Signatur gekennzeichnet. Das Ende des zentralen Verzeichnisdatensatzes wird mit seiner spezifischen Signatur angezeigt, und jeder Eintrag im zentralen Verzeichnis beginnt mit der 4-Byte-Signatur des zentralen Dateikopfs. In der ZIP-Spezifikation gibt es keine Markierung fürBeginning of File oderEnd of File. Normalerweise ist das erste Element in einer ZIP-Datei ein ZIP-Eintrag, der leicht anhand seiner lokalen Dateikopfsignatur identifiziert werden kann. Dies ist jedoch nicht unbedingt der Fall, da dies von der ZIP-Spezifikation nicht gefordert wird. Insbesondere beginnt ein selbstextrahierendes Archiv mit einem ausführbaren Dateikopf. Tools, die ZIP-Archive korrekt lesen, müssen nach der Signatur des Endes des zentralen Verzeichnisdatensatzes und dann, falls zutreffend, nach den anderen angegebenen zentralen Verzeichnisdatensätzen suchen. Sie dürfen nicht nach Einträgen vom Anfang der ZIP-Datei suchen, weil nur das zentrale Verzeichnis angibt, wo ein Dateiblock beginnt und dass er nicht gelöscht wurde. Das Scannen könnte zu falschen Positivergebnissen führen, da das Format weder verbietet, dass sich andere Daten zwischen den Blöcken befinden, noch dass Dateidatenströme solche Signaturen enthalten. Tools, die versuchen, Daten aus beschädigten ZIP-Archiven wiederherzustellen, werden das Archiv jedoch höchstwahrscheinlich nach lokalen Dateikopfsignaturen durchsuchen. Dies wird dadurch erschwert, dass die komprimierte Größe eines Dateiblocks nach dem Dateiblock gespeichert werden kann, was die sequentielle Verarbeitung erschwert.
Die ZIP-Spezifikation unterstützt auch das Verteilen von Archiven auf mehrere Dateisystemdateien. Diese Funktion wird zum Versenden von ZIP-Archiven in Teilen per E-Mail,Wechseldatenträger oder andere Wege derDatenübertragung verwendet.
Es existieren mittlerweile nachträglich eingeführte Erweiterungen wie die Zip128-Erweiterung.
Das ZIP-Dateiformat ermöglicht einen Kommentar mit bis zu 65535 Bytes Daten am Ende der Datei nach dem zentralen Verzeichnis. Weil das zentrale Verzeichnis den Offset jeder Datei im Archiv in Bezug auf den Start angibt, ist es außerdem möglich, dass der erste Dateieintrag bei einem anderen Offset als Null beginnt, obwohl einige Tools möglicherweise keineArchivdateien verarbeiten, die nicht mit einem Dateieintrag bei Offset Null beginnen.gzip kann beispielsweise einen Eintrag aus einer ZIP-Datei extrahieren, wenn dieser bei Offset Null liegt. Dadurch können beliebige Daten sowohl vor als auch nach den ZIP-Archivdaten in der Datei vorkommen und das Archiv kann weiterhin von einer ZIP-Anwendung gelesen werden. Ein Nebeneffekt davon ist, dass es möglich ist, eine Datei zu erstellen, die sowohl ein funktionierendes ZIP-Archiv als auch ein anderes Format ist, vorausgesetzt, das andere Format toleriert beliebige Daten am Ende, am Anfang oder in der Mitte. Selbstextrahierende Archive (SFX) in der vonWinZip unterstützten Form nutzen dies aus, da es sich dabei um ausführbare Dateien handelt, die derPKZIP AppNote.txt-Spezifikation entsprechen und von kompatiblen Zip Tools oder Bibliotheken gelesen werden können. Diese Eigenschaft des ZIP-Formats und desJAR-Formats, einer Variante von ZIP, kann ausgenutzt werden, um betrügerische Inhalte wie schädlicheJava-Klassen in einer scheinbar harmlosen Datei zu verbergen, beispielsweise einem ins Internet hochgeladenenGIF-Bild.[16]
Neben PKZIP existieren zahlreiche andere Programme, die dieses Dateiformat bearbeiten können. Dazu zählen freie Programme wieInfo-ZIP,PeaZip,Xarchiver oder7-Zip, dessen optimierter Deflate-Algorithmus obendrein geringfügig kleinere PKZIP-2.xx-kompatible Dateien erzeugen kann. Ferner existieren kommerzielle Programme, wieWinRAR oderWinZip.
Programm- undKlassenbibliotheken für den Zugriff auf ZIP-Dateien stehen für zahlreiche Programmiersprachen zur Verfügung. So enthält beispielsweise dieJava Platform, Standard Edition (Java SE) seit 1997 (Version 1.1) das Paket „java.util.zip“ mit entsprechenden Klassen für Komprimierung und Dekomprimierung. Weiter gibt es die Klassenbibliothek Zip64File, welche ZIP-Dateien als sogenannte Direktzugriffsdateien (englischrandom access files) handhaben kann. Zip64File steht der Öffentlichkeit vollumfänglich, kostenfrei und inklusive Quellcode zur Verfügung.
Das im SystemmacOS integrierte ProgrammBOMArchiveHelper erzeugt und dekomprimiert ebenfalls im ZIP-Format. Auch der Datei-Explorer unter Windows ist in der Lage, ZIP-Dateien zu packen und zu entpacken, sodass hier in der Regel keine weitere Software installiert werden muss.[17] Aus lizenzrechtlichen Gründen durfte die Implementierung in Windows nicht in der Lage sein, programmierbar benutzt werden zu können.[18]
Nach Auskunft der Firma PKWare bezieht sich der Namezip (englisch fürReißverschluss) auf das Verpacken von vielen Einzeldateien in einen größeren Container und nicht auf die Komprimierungsfunktion des Programms.
Nicht jedes Kompressionsprogramm, dessen Name die Zeichenkette „ZIP“ enthält, arbeitet mit dem ZIP-Dateiformat. Die wichtigsten Beispiele sindgzip vom GNU-Projekt undbzip2, die jeweils in einem eigenständigen Format nur eine einzelne Datei komprimieren. Zum Archivieren mehrerer Dateien muss in diesem Fall vor der Komprimierung ein anderes Programm verwendet werden (im Zusammenhang mit gzip und bzip2 meisttar). Auch bei7-Zip wird zwar das ZIP-Dateiformat voll unterstützt, aber das eigene Archivformat7z ist nicht mit ZIP kompatibel.
WinZip führte mit Version 12.1 die Erweiterungzipx des ZIP-Formats ein, die die Verwendung neuerer Kompressionsmethoden als DEFLATE, insbesondere BZip, LZMA, PPMd, Jpeg and Wavpack, kennzeichnet.
Das Wort „zippen“ wird gelegentlich alsDeonym für „komprimiert archivieren“ verwendet, jedoch muss dabei nicht zwangsläufig das Packen als Zip-Datei gemeint sein.
Bei folgenden Dateiformaten handelt es sich um ZIP-Dateien, in denen sich allerdings bestimmte Dateien befinden müssen:
Java Archive (JAR) – ein auf Zip basierendes Format fürJava-Programmdaten
Android Package (APK) – ähnlich wie JAR-Dateien jedoch fürAndroid[19][20]
OpenDocument (ODF) – das unter anderem vonApache OpenOffice verwendete Dateiformat ist ein auf mehrereXML-Dateien aufbauendes Format, welches mithilfe vonZip zu einzelnen Dateien komprimiert wird
↑ISO/IEC 21320-1:2015. Information technology — Document Container File — Part 1: Core. In: iso.org. ISO, Oktober 2015, abgerufen am 11. April 2022 (englisch).
↑ZIP File Format Specification. Version 6.3.4. In: pkware.cachefly.net. PKWARE Inc, 1. Oktober 2014, archiviert vom Original am 24. Dezember 2014; abgerufen am 18. August 2017 (englisch).
↑Android package – Eintrag imAndroid-Wiki; u. a. mit „Die verwendete Programmiersprache ist dabei meist Java, […]“, im dortigen (zuletzt am 5. November 2017 geänderten)Abschnitt „APK-Datei erstellen“