Il calcolo dei CRC (o, meglio, sha1sums) su entrambi i file richiede comunque la lettura di ogni byte. Se fai un confronto byte per byte, puoi uscire non appena vedi una mancata corrispondenza - e non devi preoccuparti di due file diversi che hanno lo stesso checksum (anche se è incredibilmente improbabile per sha1sum) . Quindi, se stai facendo il confronto localmente, un confronto byte per byte sarà almeno altrettanto veloce di un confronto checksum (a meno che tu non abbia già calcolato i checksum comunque).
D'altra parte, i confronti di checksum sono utili quando si confrontano file che non si trovano sulla stessa macchina; i checksum possono essere calcolati localmente e non è necessario trasferire l'intero contenuto sulla rete.
Sono anche possibili approcci ibridi. Ad esempio, è possibile calcolare e confrontare i checksum per i due file un pezzo alla volta, il che può evitare di leggere tutti i file ( se differiscono) evitando anche di trasmettere l'intero file attraverso la rete. Il protocollo rsync fa qualcosa del genere.
Nota che l'uso di un semplice CRC ti dà una buona probabilità di una collisione, come menzionato da Dave Rager nella sua risposta. Usa almeno sha1sum o anche qualcosa di più recente. (Non tentare di inventare il tuo algoritmo di hashing; le persone che hanno sviluppato sha1sum sanno molto di più su queste cose rispetto a nessuno dei due.)
Per quanto riguarda la probabilità di collisione, se usi un hash decente come sha1sum non devi preoccuparti, a meno che qualcuno non stia costruendo deliberatamente ed economicamente file i cui sha1sums si scontrano (generare tali collisioni non era fattibile quando l'ho scritto per la prima volta , ma si stanno compiendo progressi ). Citando "Pro Git" di Scott Chacon , sezione 6.1 :
Ecco un esempio per darti un'idea di cosa sarebbe necessario per ottenere una collisione SHA-1. Se tutti i 6,5 miliardi di umani sulla Terra stessero programmando, e ogni secondo, ognuno produceva codice che era l'equivalente dell'intera storia del kernel Linux (1 milione di oggetti Git) e lo spingeva in un enorme repository Git, ci sarebbero voluti 5 anni quel repository conteneva abbastanza oggetti da avere una probabilità del 50% di una singola collisione di oggetti SHA-1. Esiste una maggiore probabilità che ogni membro del team di programmazione venga attaccato e ucciso dai lupi in incidenti non collegati nella stessa notte.
Sommario :
Il confronto byte per byte è utile per i confronti locali. sha1sum è buono per il confronto remoto e non presenta possibilità significative di falsi positivi.