La dimostrazione di due file Zip è identica

2

Ho migrato alcuni file da un sistema di controllo versione a un altro. Devo dimostrare che il contenuto è identico (tra origine e destinazione, denotare 1, 2). Ci sono alcuni file zip (li chiamiamo A B C) ognuno dei quali contiene centinaia di file. Sto cercando il modo migliore per fare un confronto CRC tra il contenuto del vecchio VCS e quello nuovo.

1) Genera CRC su ogni file ZIP nel suo complesso e confronta il CRC di 2 file di zips corrispondenti. Confronto CRC ZIP-ZIP.

Ovviamente, questo approccio sarà più facile. Ma non so cosa includerà nel calcolo del CRC. O anche se il CRC di due file zip con contenuto di file identico potrebbe essere diverso. (Data di modifica?).

2) Confrontare CRC di ogni file in zip con i file corrispondenti. Confronto CRC file-file

Con questo approccio, dovrò scrivere uno script che attraversi ogni file in zip (ad esempio A1) ed estrarre il loro CRC. Costruisci una lista con [nome file percorso, crc]. fare lo stesso per zip (A2). Confronta la lista.

Qualcuno ha mai fatto qualcosa del genere?

    
posta meah1991 09.04.2018 - 20:53
fonte

2 risposte

5

Se sei sicuro che l'algoritmo di compressione utilizzato per creare entrambi i file zip sia identico, puoi semplicemente confrontare i file zip.

Altrimenti dovrai decomprimere le cerniere e confrontare i file contenuti.

Gli hash generati durante la compressione potrebbero essere utilizzati per accelerare i confronti se si accetta la possibilità di collisioni che causano falsi positivi. Questo può mostrare rapidamente i file in modo diverso.

Ma le collisioni significano che il meglio che puoi fare con un hash è che i file di presentazione "molto probabilmente" sono identici. Con abbastanza bit e un buon algoritmo di hashing stiamo parlando di probabilità simili a vincere la lotteria. In un'applicazione pratica dovrai decidere se la velocità vale il rischio.

Se sei serio su Proof i file sono identici non puoi ignorare casi improbabili. Gli alloggi a volte atterrano sui loro bordi. A volte gli hash si scontrano. Ma a volte i bit si capovolgono casualmente e passano inosservati. Quindi non pensare che un confronto un po 'dei file non compressi sia garantito per darti una prova perfetta. Quello che ottieni è un sacco di bit che ti danno davvero buone probabilità.

Quest'ultimo è quando il CRC è utile. Non come un digest. È un controllo degli errori. Rende meno probabile che l'errore di copia non passi inosservato. Ancora non perfetto perché i bit CRC possono essere malamente copiati.

Quindi non c'è una prova perfetta. Fai bene e puoi avere fantastici livelli di fiducia, se ne hai il tempo.

    
risposta data 09.04.2018 - 21:22
fonte
0

Questo dovrebbe fare il lavoro (in bash):

# Generate a file containing MD5 hashes for all files in A.zip
unzip A.zip -d A_dump
(cd A_dump && find . -type f | xargs md5sum > ../A.md5)

# Compare the hashes to the content of B.zip
unzip B.zip -d B_dump
(cd B_dump && md5sum --check ../A.md5)

Ovviamente puoi usare un algoritmo di hash migliore se lo desideri, e usare lo strumento appropriato come sha1sum o sha256sum ma MD5 è veloce e anche se le collisioni sono possibili, sono molto improbabili a meno che non siano create.

Per la versione python, il zipfile e hashlib forniscono tutto ciò di cui hai bisogno.

    
risposta data 20.04.2018 - 11:49
fonte

Leggi altre domande sui tag