Md5-Prüfsumme nach gunzip und gzip unterschiedlich

910
kevbonham

Ich habe versehentlich eine Handvoll gezippter Dateien aus einem Ordner gelöscht. Zum Glück hatte ich sie an einem anderen Ort unkomprimiert und bin gerade dabei, sie wiederherzustellen. Ich hatte die MD5-Prüfsummen für die alten (jetzt gelöschten) Dateien, aber die Prüfsummen für die neu komprimierten Dateien stimmen nicht überein. Mist

Aber ... ich habe einen anderen Ordner, der ähnliche gzippte Dateien aus derselben Quelle enthält, und wenn ich gunzipund dann sofort gzipeine dieser Dateien die Prüfsumme wieder anders ist, habe ich den Verdacht, dass der Urheber der Dateien andere Parameter verwendet gzip (wenn es eine alternative Erklärung gibt, würde ich es gerne hören).

Gibt es eine Möglichkeit, die verwendeten gzip-Parameter zu identifizieren, damit ich überprüfen kann, dass meine Manipulation den Inhalt der Dateien nicht beschädigt hat?

1

2 Antworten auf die Frage

2
xenoid

Alle diese Dienstprogramme enthalten einige Metainformationen, die bei jedem Lauf geändert werden können, so dass selbst bei identischen Dateien leicht unterschiedliche ZIPs (und damit auch ein anderes MD5) angezeigt werden. Um den Inhalt zu vergleichen, müssen Sie sie entpacken.

Wenn Sie in Wikipedia nach GZIP suchen, erfahren Sie, dass eine GZip-Datei mit einem 10-Byte-Header beginnt , der eine magische Zahl (1f 8b), eine Versionsnummer und einen Zeitstempel enthält . Mit anderen Worten, jeder Lauf garantiert garantiert eine andere Datei.

Das ist eigentlich nicht unbedingt wahr. Wenn Sie eine Datei (auf der Festplatte) gzipen, eine Prüfsumme erstellen, sie mit der Pistole zippen, sie erneut gzipen und sie erneut prüfen, erhalten Sie übereinstimmende Prüfsummen (oder zumindest ich). Der Zeitstempel entspricht der Originaldatei. Wenn sich die ursprüngliche "Datei" nicht auf der Festplatte befand, ist dies die aktuelle Uhrzeit. jjlin vor 7 Jahren 0
@jjin Richtig. Wenn Sie jedoch das übliche Paket `tar -czf some.tar.gz 'ausführen, dann ist der Zeitstempel die aktuelle Uhrzeit (Änderung des fliegenden Tar). xenoid vor 7 Jahren 0
Ja, das stimmt für den Fall, den Sie beschreiben. Ich weise nur darauf hin, dass es nicht für alle gezippten Dateien gilt. Nach meiner Lektüre der Frage deutet nichts darauf hin, dass OP mit .tar.gz-Dateien arbeitet. Es sieht eigentlich eher so aus, als würde er mit einzelnen .gz-Dateien arbeiten. jjlin vor 7 Jahren 0
Ich nehme an, es gibt eine aktualisierte Frage - gibt es eine Möglichkeit, die Checksumme, die ursprünglich zum Vergleich durchgeführt wurde, zu replizieren, ist es einfach nicht so, wie die MD5-Checksumme funktioniert? Erinnern Sie sich, ich habe einen anderen Satz unverfälschter Dateien, die ich möglicherweise nachahmen könnte. kevbonham vor 7 Jahren 0
Der Vergleich der MD5-Hashes von GZIP-Dateien ist mit Gefahren (und falschen Negativen) behaftet. Sie können sie jedoch mit einem Razzia-Befehl ausführen und die MD5-Hashwerte der unkomprimierten Dateien vergleichen. Diese sollten übereinstimmen. xenoid vor 7 Jahren 0
2
jjlin

Das Standard-Unix- fileDienstprogramm enthält einige grundlegende Informationen zu einer GZ-Datei, z. B .:

$ file foo.gz foo.gz: gzip compressed data, was "foo", from Unix, last modified: Tue Aug 1 14:19:21 2017, max compression 

Wie Sie sehen, speichert der Header den ursprünglichen Dateinamen, das Betriebssystem, auf dem die Komprimierung durchgeführt wurde, die Änderungszeit und die Komprimierungsstufe. Beachten Sie, dass der Originaldateiname anders aussehen könnte, wenn Sie so etwas tun gzip -c tempfile > foo.gz. In diesem Fall wäre der Originaldateiname der Fall tempfile. Oder es existiert nicht einmal, wenn gzip keinen ursprünglichen Dateinamen erhalten hat, weil es aus einem Stream (z tar czf foo.tar.gz somedir. B. ) gelesen hat .

Daher möchten Sie wahrscheinlich eine Vorstellung davon bekommen, welche Faktoren zuerst anders sein könnten. Ich weiß nicht, wie wichtig das alles wirklich für Sie ist, aber Sie können sich RFC 1952 ansehen, die das Dateiformat angibt. Sie können verschiedene Einstellungen ausprobieren und sogar einige der Felder im Hex-Modus bearbeiten, um sie ggf. an den Ersteller anzupassen (z. B. anderes Betriebssystem).

Mir war nicht klar, dass md5 auch in der Kopfzeile nachgesehen hat. Diese Dateien haben eine andere Herkunft (als sie dekomprimiert wurden, habe ich sie mit einem Python-Skript verkettet und dann getrennt). Im Prinzip müsste ich also die Kopfzeile reproduzieren, damit die Prüfsummen aneinandergereiht werden? kevbonham vor 7 Jahren 0
Eine Prüfsumme für eine Datei behandelt sie im Allgemeinen nur als Bytestrom, ohne Rücksicht auf das interne Format / die interne Struktur. Sie müssen also eine neue Datei erstellen, die bitweise identisch mit der Originaldatei ist, um eine übereinstimmende Prüfsumme zu erhalten. jjlin vor 7 Jahren 1