Il calcolo dei CRC (o, meglio, sha1sums) su entrambi i file richiede comunque la lettura di ogni byte. Se esegui 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 veloce come un confronto di checksum (a meno che tu non abbia già calcolato i checksum comunque).
D'altro canto, i confronti del 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 possibili anche approcci ibridi. Ad esempio, è possibile calcolare e confrontare i checksum dei due file un blocco alla volta, il che può evitare di leggere l'intero file ( se sono diversi) evitando al contempo di trasmettere l'intero file attraverso la rete. Il protocollo rsync fa qualcosa del genere.
Si noti che l'utilizzo di un semplice CRC offre una buona probabilità di collisione, come ha detto Dave Rager nella sua risposta. Usa almeno sha1sum, o anche qualcosa di più recente. (Non tentare di inventare il proprio algoritmo di hashing, le persone che hanno sviluppato sha1sum sanno molto più su questa roba di noi due.)
Per quanto riguarda la probabilità di collisione, se usi un hash decente come sha1sum, non devi preoccuparti di questo, a meno che qualcuno non stia deliberatamente e costoso costruendo file i cui sha1sum si scontrano (generando tali collisioni erano non fattibili quando ho scritto per la prima volta questo, ma progress è in corso ). Citando "Pro Git" di Scott Chacon , sezione 6.1 :
Here’s an example to give you an idea of what it would take to get a
SHA-1 collision. If all 6.5 billion humans on Earth were programming,
and every second, each one was producing code that was the equivalent
of the entire Linux kernel history (1 million Git objects) and pushing
it into one enormous Git repository, it would take 5 years until that
repository contained enough objects to have a 50% probability of a
single SHA-1 object collision. A higher probability exists that every
member of your programming team will be attacked and killed by wolves
in unrelated incidents on the same night.
Riepilogo:
Il confronto byte per byte è utile per i confronti locali. sha1sum è utile per il confronto remoto e non presenta alcuna possibilità significativa di falsi positivi.