Dateien mit dem gleichen Inhalt, aber mit unterschiedlichen MD5-Summen, wenn gzip'd?


16

Ich weiß nicht, warum dies geschieht, aber ich lade einige Dateien Amazon S3hoch, um die gesendeten Dateien dann zu löschen, indem ich sie md5sumsowohl in Amazon als auch lokal überprüfe . Aber vor kurzem habe ich festgestellt, dass diese Ausgabe über denselben Inhalt zwei verschiedene generiertmd5sum

[valter.silva@alog ~]$ ls
renew.log  s3

[valter.silva@alog ~]$ ls s3/
renew.log

[valter.silva@alog ~]$ md5sum renew.log 
d41d8cd98f00b204e9800998ecf8427e  renew.log

[valter.silva@alog ~]$ md5sum s3/renew.log 
d41d8cd98f00b204e9800998ecf8427e  s3/renew.log

[valter.silva@alog ~]$ gzip renew.log 
[valter.silva@alog ~]$ gzip s3/renew.log 

[valter.silva@alog ~]$ md5sum renew.log.gz 
aa1f0ae9a61aac5bcd32b917fbd9324b  renew.log.gz

[valter.silva@alog ~]$ md5sum s3/renew.log.gz 
6ae0e48edb68e9ed938fdfc3894f6c94  s3/renew.log.gz

Weiß jemand, warum das passiert? Oder wie soll ich prüfen, ob meine Dateien konsistent und zuverlässig sind?

update Antwort von Tiago Cruz:

[valter.silva@alog ~]$ sha1sum renew.log 
da39a3ee5e6b4b0d3255bfef95601890afd80709  renew.log

[valter.silva@alog ~]$ sha1sum s3/renew.log 
da39a3ee5e6b4b0d3255bfef95601890afd80709  s3/renew.log

[valter.silva@alog ~]$ gzip renew.log 
[valter.silva@alog ~]$ gzip s3/renew.log 

[valter.silva@alog ~]$ sha1sum renew.log.gz 
2d9111d9db71da9fe4de57fbc19c89eb0bd46470  renew.log.gz

[valter.silva@alog ~]$ sha1sum s3/renew.log.gz 
05014ca24d133f1761f9134e8dab52e6e2111010  s3/renew.log.gz

Es gibt das gleiche Problem Tiago.

Antworten:


54

Laut RFC 1952 , die gzipenthält Dateikopf die Änderungszeit der ursprünglichen Datei (Feld MTIME). Sie können die Überschrift im Klartext anzeigen 1) mit gzip -lv renew.log.gz:

method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla 64263ac7 Jun 21 17:59                 314                 597  52.1% renew.log

Also, wenn Sie wirklich die gzip - Dateien vergleichen wollen, komprimieren sie mit der -nOption, um nicht speichert die ursprünglichen Dateinamen und Zeitstempel ,

gzip -n renew.log s3/renew.log 

und ihre md5sum sollte identisch sein.

Sonst könntest du nutzen

md5sum <(zcat renew.log.gz) <(zcat s3/renew.log.gz)

um die md5summe der dekomprimierten dateien zu berechnen.


1) Die angezeigte Uhrzeit und das angezeigte Datum werden jedoch nicht aus der Kopfzeile übernommen, sondern stellen die aktuellen Werte dar; Dies gilt auch für den Dateinamen:

$ gzip renew.log 
$ mv renew.log.gz foo.gz
$ gzip -lv foo.gz -------- uncompressed name is taken from current name ---v
method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla 6c721644 Jul 11 22:34                 580                1586  65.7% foo
$ hexdump -C foo.gz | head -n 2
00000000  1f 8b 08 08 f0 16 df 51  00 03 72 65 6e 65 77 2e  |.......Q..renew.|
00000010  6c 6f 67 00 8d 93 dd 6e  9b 30 18 86 8f 89 94 7b  |log....n.0.....{|
                                                             ^^^-------^^^^^
                                                  original filename is stored in the header

12

Warum erwarten Sie, dass die komprimierte Version derselben Datei dieselbe ist? Das Komprimierungsprogramm (gzip) kann einen bestimmten Zeitstempel in den Header aufnehmen oder zufällige Algorithmen verwenden.

Und genau! Der gzip-Header enthält den Zeitstempel . Wenn Sie möchten, dass Ihre komprimierten Dateien gleich sind, muss Ihre Datei den gleichen Zeitstempel haben!

Wenn Sie also eine Datei kopieren, tun Sie dies immer so cp -p file1 file1, nicht nur cp file1 file2- das ist eigentlich eine schlechte Angewohnheit!


10

Benutze einfach gzip mit '-n' Flag:

tiagocruz@stark:~$ gzip -n Yippie-Ki-Yay.mp3 bla/Yippie-Ki-Yay.mp3 

tiagocruz@stark:~$ sha1sum Yippie-Ki-Yay.mp3.gz bla/Yippie-Ki-Yay.mp3.gz 
b44b21c5f414935f1ced1187bfafd989704474a5  Yippie-Ki-Yay.mp3.gz
b44b21c5f414935f1ced1187bfafd989704474a5  bla/Yippie-Ki-Yay.mp3.gz

Quelle: /unix/31008/why-does-the-gzip-version-of-files-produce-a-different-md5-checksum


Ich aktualisiere meine Antwort Tiago, im Allgemeinen ist das Problem das gleiche.
Valter Silva

2
Verwenden Sie mit '-n' Flagge
Tiago Cruz

2
-1, diese Antwort sollte ein Kommentar sein (oder drei)
Dieser Brasilianer

@ ruda.almeida Dies ist eine Antwort, die gültig genug ist, um zu zeigen, wie man testet und dann das Problem behebt.
James Mertz

2
OK, alles was vor "benutze gzip mit '-n'" steht, sollte kommentiert werden, da es versucht die Frage zu klären, wofür genau Kommentare sind. Und dann ist der zweite Teil technisch korrekt, es handelt sich jedoch um eine minderwertige Antwort, da weder erklärt wird, was das Problem verursacht, noch warum der vorgeschlagene Vorschlag das Problem löst.
Der Brasilianer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.