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