Wieso starten ZIP Datein immer mit 50 4B im hex Editor?
Hi,
Könnte mir hier vielleicht jemand mit meinen Informatik Hausaufgaben weiterhelfen?😅
Wir sollen herausfinden warum ZIP Dateien immer mit 50 4B (im Hex Editor) anfangen.
Wenn jemand weis wieso sie das tuen, dann würde ich mich sehr über eine Antwort freuen.
mfg
2 Antworten
Die Prämisse ist falsch: sie starten nicht immer mit diesen zwei Bytes ("PK" in ASCII). ZIP-Dateien werden nämlich von hinten gelesen (wo das Central Directory steht), nicht von vorn, und können vor dem eigentlichen Inhalt beliebige Daten enthalten. So war es auch möglich, selbstextrahierende ZIPs zu bauen. Die fangen dann z.B. mit "MZ" an.
Warum aber diese zwei Bytes "PK"? Weil der Erfinder (Phil Katz) diese zwei Bytes als "Signatur" verwendet hat. Jeder Local Header - das ist die Datenstruktur, die jeweils vor den eigentlichen archivierten Dateien steht - fängt damit an. Wirklich nötig wäre das nicht, kann aber helfen, beschädigte Dateien halbwegs wiederherzustellen.
Wer Details wissen will, liest APPNOTE.TXT.
Ja, da kann man viele lustige Sachen machen (hier ein paar). Das Format ist eigentlich bis heute sehr schlampig definiert und hat viele Lücken - hat sich aber trotzdem über Jahrzehnte als de-facto-Standard etabliert und gehalten.
Korrekt! Zur Ergänzung:
Die meisten Dateien haben einen Header damit eine Anwendung oder das Betriebssystem erkennen können, um was für eine Datei es sich handelt.
So kann dann Word, Excel, Paint oder was auch immer sehr schnell feststellen, ob die mit der Datei die man damit öffnen will umgehen kann und wie die verarbeitet werden muss.
Windows guckt auf die Dateiendung, den Suffix (z.B. .EXE), die meisten anderen Betriebssysteme können das zwar auch, sind aber nicht auf Dateiendungen angewiesen. Die schauen schnell auf die ersten paar Zeichen im sogenannten Header und wissen dann, was das ist.
Und bei den ZIP Dateien hat halt der "Macher" PK gewählt. PNG Grafiken fangen mit
(decimal) 137 80 78 71 13 10 26 10
(hexadecimal) 89 50 4e 47 0d 0a 1a 0a
(ASCII C notation) \211 P N G \r \n \032 \n
an. Da steht also direkt "PNG" vorne drin. Das allererste Zeichen davor verhindert, dass nicht aus versehen eine Text-Datei die zufällig mit PNG anfängt für eine Bilddatei gehalten wird.
Es gibt keine Vorschrift wie ein Header aus zu sehen hat und ob es überhaupt einen gibt. Die meisten gängigen Dateien haben aber einen.
Schau mal hier: https://en.wikipedia.org/wiki/List_of_file_signatures
Das ist die Datei-Signatur von ZIP Dateien, an der andere Programme erkennen können, dass es sich um ein ZIP-Archiv handelt und damit die entsprechende Programm-Bibliothek aufrufen, um die Datei zu entpacken. Viele Dateiformate basieren heutzutage auf ZIP Containern in denen die eigentlichen Anwendungsdaten verpackt sind (unter anderem alle aktuellen Microsoft Office, LibreOffice und Openoffice Dateien).
Oder man baut sich einen zip Container der auch als gültige PNG Datei funktioniert ¯\_(ツ)_/¯