GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Dateien mit gleichem Inhalt, aber mit unterschiedlichen md5-Summen, wenn sie gezippt wurden?

Gemäß RFC 1952 ist der gzip Dateiheader enthält die Änderungszeit der Originaldatei (Feld MTIME ). Mit gzip -lv renew.log.gz können Sie den Header im Klartext anzeigen :

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

Wenn Sie also die gzip-Dateien wirklich vergleichen möchten, komprimieren Sie sie mit -n Option, um den ursprünglichen Dateinamen und Zeitstempel nicht zu speichern ,

gzip -n renew.log s3/renew.log 

und ihre MD5-Summe sollte identisch sein.

Andernfalls könnten Sie

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

um die md5-Summe der dekomprimierten Dateien zu berechnen.

Die angezeigte Uhrzeit und das 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

Warum erwarten Sie, dass die komprimierte Version derselben Datei dieselbe ist? Das Komprimierungsprogramm (gzip) kann einen 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 als cp -p file1 file1 , nicht nur cp file1 file2 - das ist eigentlich eine schlechte Angewohnheit!


Verwenden Sie einfach gzip mit '-n' Flag:

[email protected]:~$ gzip -n Yippie-Ki-Yay.mp3 bla/Yippie-Ki-Yay.mp3 

[email protected]:~$ 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:https://unix.stackexchange.com/questions/31008/why-does-the-gzip-version-of-files-produce-a-different-md5-checksum


Linux
  1. Makefiles mit Quelldateien in verschiedenen Verzeichnissen

  2. Wie leite ich stderr und stdout in verschiedene Dateien in derselben Zeile im Skript um?

  3. tar/gzip mit Ausnahme bestimmter Dateien

  4. bash:/bin/tar:Argumentliste zu lang, wenn viele Dateien mit tar komprimiert werden

  5. Linux Bash:Verschieben Sie mehrere verschiedene Dateien in dasselbe Verzeichnis

Sichern Sie Ihre Dateien mit rsync

Bash-Skript zum Löschen aller bis auf N Dateien bei alphabetischer Sortierung

Wie kann ich beim Lesen einer Datei mit „weniger“ oder „mehr“ den Inhalt in Farbe erhalten?

Ist es möglich, Dateien zwischen 2 verschiedenen Betriebssystemen auf demselben Computer zu teilen?

leere Dateien mit derselben Verzeichnisstruktur wie das Referenzverzeichnis erstellen

Warum funktioniert find -mtime bei Dateien mit unterschiedlichen Zeitzonen nicht wie erwartet?