GNU/Linux >> Znalost Linux >  >> Linux

Soubory se stejným obsahem, ale s různými součty md5 při gzipování?

Podle RFC 1952, gzip hlavička souboru obsahuje čas úpravy původního souboru (pole MTIME ). Záhlaví můžete zobrazit jako prostý text pomocí 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

Pokud tedy opravdu chcete porovnat soubory gzip, komprimujte je pomocí -n možnost neukládat původní název souboru a časové razítko ,

gzip -n renew.log s3/renew.log 

a jejich součet md5 by měl být stejný.

Jinak byste mohli použít

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

vypočítat součet md5 dekomprimovaných souborů.

Zobrazený čas a datum však nejsou převzaty z hlavičky, ale představují aktuální hodnoty; to je také případ názvu souboru:

$ 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

Proč očekáváte, že komprimovaná verze stejného souboru bude stejná? Kompresní program (gzip) může v hlavičce obsahovat nějaké časové razítko nebo může používat některé randomizované algoritmy.

A přesně! Záhlaví gzip obsahuje časové razítko. Pokud chcete, aby vaše komprimované soubory byly stejné, váš soubor musí mít stejné časové razítko!

Takže když kopírujete soubor, vždy to dělejte jako cp -p file1 file1 , nejen cp file1 file2 - to je vlastně špatný zvyk!


Stačí použít gzip s příznakem '-n':

[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

Zdroj:https://unix.stackexchange.com/questions/31008/why-does-the-gzip-version-of-files-produce-a-different-md5-checksum


Linux
  1. Makefiles se zdrojovými soubory v různých adresářích

  2. Jak mohu získat obsah v barvách při čtení souboru s „méně“ nebo „více“?

  3. Vyloučit skryté soubory při hledání pomocí Unix/Linux find?

  1. Jak mohu spustit jiný příkaz, ale se stejnými argumenty?

  2. vytvářet prázdné soubory se stejnou adresářovou strukturou jako referenční adresář

  3. Proč find -mtime nefunguje podle očekávání u souborů s různými časovými pásmy?

  1. Jak šifrovat soubory pomocí gocryptfs na Linuxu

  2. Cat soubory s adresářem?

  3. Porovnat adresáře, ale ne obsah souborů?