Um CRCs (oder besser sha1sums) für beide Dateien zu berechnen, muss ohnehin jedes Byte gelesen werden. Wenn Sie einen byteweisen Vergleich durchführen, können Sie den Vorgang abbrechen, sobald Sie eine Nichtübereinstimmung feststellen - und Sie müssen sich keine Gedanken über zwei verschiedene Dateien machen, die zufällig dieselbe Prüfsumme haben (obwohl dies für sha1sum auf jeden Fall unwahrscheinlich ist). . Wenn Sie also den Vergleich lokal durchführen, ist ein byteweiser Vergleich mindestens so schnell wie ein Prüfsummenvergleich (es sei denn, Sie haben die Prüfsummen bereits berechnet).
Andererseits sind Prüfsummenvergleiche nützlich, wenn Sie Dateien vergleichen, die sich nicht auf demselben Computer befinden. Die Prüfsummen können lokal berechnet werden und Sie müssen nicht den gesamten Inhalt über das Netzwerk übertragen.
Auch hybride Ansätze sind möglich. Beispielsweise können Sie Prüfsummen für die beiden Dateien auf einmal berechnen und vergleichen, um zu vermeiden, dass die gesamten Dateien gelesen werden ( sofern sie sich unterscheiden) und gleichzeitig die gesamte Datei über das Netzwerk übertragen wird. Das rsync-Protokoll macht so etwas.
Beachten Sie, dass die Verwendung eines einfachen CRC eine faire Chance für eine Kollision bietet, wie Dave Rager in seiner Antwort erwähnt hat. Verwenden Sie mindestens sha1sum oder sogar etwas Neueres. (Versuchen Sie nicht, Ihren eigenen Hashalgorithmus zu erfinden. Die Leute, die sha1sum entwickelt haben, wissen weit mehr über dieses Zeug als wir beide.)
Was die Wahrscheinlichkeit von Kollisionen angeht, müssen Sie sich, wenn Sie einen anständigen Hash wie sha1sum verwenden, so gut wie keine Sorgen machen, es sei denn, jemand erstellt absichtlich und teuer Dateien, deren sha1sums kollidieren (das Erzeugen solcher Kollisionen war nicht möglich, als ich dies zum ersten Mal schrieb , aber es werden Fortschritte erzielt ). Zitat von Scott Chacons "Pro Git" , Abschnitt 6.1 :
Hier ist ein Beispiel, um Ihnen eine Vorstellung davon zu geben, was nötig wäre, um eine SHA-1-Kollision zu erhalten. Wenn alle 6,5 Milliarden Menschen auf der Erde programmieren und jede Sekunde Code produzieren würden, der der gesamten Linux-Kernel-Historie (1 Million Git-Objekte) entspricht, und ihn in ein riesiges Git-Repository verschieben würden, würde es 5 Jahre dauern, bis Dieses Repository enthielt genügend Objekte, um eine Wahrscheinlichkeit von 50% für eine einzelne SHA-1-Objektkollision zu haben. Es besteht eine höhere Wahrscheinlichkeit, dass jedes Mitglied Ihres Programmierteams in derselben Nacht in nicht zusammenhängenden Vorfällen von Wölfen angegriffen und getötet wird.
Zusammenfassung :
Der byteweise Vergleich ist gut für lokale Vergleiche. sha1sum ist gut für Fernvergleiche und bietet keine signifikante Chance auf Fehlalarme.