El cálculo de CRC (o, mejor aún, sha1sums) en ambos archivos requiere leer cada byte de todos modos. Si hace una comparación byte por byte, puede salir tan pronto como vea una falta de coincidencia, y no tiene que preocuparse por dos archivos diferentes que tengan la misma suma de comprobación (aunque eso es muy poco probable para sha1sum) . Entonces, si está haciendo la comparación localmente, una comparación byte por byte será al menos tan rápida como una comparación de suma de verificación (a menos que ya haya calculado las sumas de verificación de todos modos).
Por otro lado, las comparaciones de suma de comprobación son útiles cuando compara archivos que no están en la misma máquina; las sumas de verificación se pueden calcular localmente y no tiene que transferir todo el contenido a través de la red.
Los enfoques híbridos también son posibles. Por ejemplo, puede calcular y comparar sumas de verificación para los dos archivos un trozo a la vez, lo que puede evitar leer los archivos completos ( si difieren) al tiempo que evita transmitir todo el archivo a través de la red. El protocolo rsync hace algo como esto.
Tenga en cuenta que el uso de un CRC simple le brinda una posibilidad justa de colisión, como Dave Rager mencionó en su respuesta. Use al menos sha1sum, o incluso algo más reciente. (No intente inventar su propio algoritmo de hash; las personas que desarrollaron sha1sum saben mucho más sobre estas cosas que cualquiera de nosotros).
En cuanto a la probabilidad de colisión, si se utiliza un hash decente como sha1sum que prácticamente no tiene que preocuparse por ello, a menos que alguien es deliberada y costoso construir archivos cuyos sha1sums chocan (generación de tales colisiones era no es factible cuando escribí por primera vez este , pero se está progresando ). Citando "Pro Git" de Scott Chacon , sección 6.1 :
Aquí hay un ejemplo para darle una idea de lo que se necesitaría para obtener una colisión SHA-1. Si todos los 6.500 millones de humanos en la Tierra estuvieran programando, y cada segundo, cada uno produjera código que fuera el equivalente de toda la historia del kernel de Linux (1 millón de objetos Git) y lo empujara a un enorme repositorio Git, tomaría 5 años hasta ese repositorio contenía suficientes objetos para tener una probabilidad del 50% de una sola colisión de objetos SHA-1. Existe una mayor probabilidad de que cada miembro de su equipo de programación sea atacado y asesinado por lobos en incidentes no relacionados en la misma noche.
Resumen :
La comparación byte por byte es buena para las comparaciones locales. sha1sum es bueno para la comparación remota, y no presenta una posibilidad significativa de falsos positivos.