Для вычисления CRC (или, лучше, sha1sums) для обоих файлов в любом случае требуется чтение каждого байта. Если вы проводите побайтовое сравнение, вы можете выйти, как только увидите несоответствие, и вам не нужно беспокоиться о двух разных файлах, которые имеют одинаковую контрольную сумму (хотя для sha1sum это маловероятно) , Поэтому, если вы выполняете сравнение локально, побайтовое сравнение будет, по крайней мере, таким же быстрым, как сравнение контрольной суммы (если вы все равно не вычислили контрольные суммы).
С другой стороны, сравнение контрольных сумм полезно, когда вы сравниваете файлы, которые находятся не на одном компьютере; контрольные суммы могут быть вычислены локально, и вам не нужно передавать весь контент по сети.
Гибридные подходы также возможны. Например, вы можете вычислять и сравнивать контрольные суммы для двух файлов по частям за раз, что позволяет избежать чтения целых файлов ( если они различаются), а также избежать передачи всего файла по сети. Протокол rsync делает что-то вроде этого.
Обратите внимание, что использование простого CRC дает вам хороший шанс столкновения, как упоминал Дейв Рэйджер в своем ответе. Используйте хотя бы sha1sum или даже что-то более новое. (Не пытайтесь придумать свой собственный алгоритм хэширования; люди, разработавшие sha1sum, знают об этом гораздо больше, чем кто-либо из нас.)
Что касается вероятности коллизии, если вы используете приличный хеш, такой как sha1sum, вам почти не придется об этом беспокоиться, если только кто-то намеренно и дорого не создает файлы, чьи sha1sums сталкиваются (генерация таких коллизий была невозможна, когда я впервые написал это , но прогресс налицо ). Цитирую Скотта Чакона "Pro Git" , раздел 6.1 :
Вот пример, чтобы дать вам представление о том, что потребуется, чтобы получить столкновение SHA-1. Если бы все 6,5 миллиарда людей на Земле программировали, и каждую секунду каждый из них создавал код, который был эквивалентен всей истории ядра Linux (1 миллион объектов Git), и помещал его в один огромный репозиторий Git, это заняло бы 5 лет, пока этот репозиторий содержал достаточно объектов, чтобы иметь 50% вероятности столкновения одного объекта SHA-1. Существует более высокая вероятность того, что каждый член вашей команды программистов будет атакован и убит волками в несвязанных инцидентах в одну и ту же ночь.
Резюме :
Побайтовое сравнение хорошо для локальных сравнений. sha1sum хорош для удаленного сравнения и не дает значительного шанса ложных срабатываний.