¿Cuál es un método más preciso de detección de archivos duplicados: SHA1 o CRC32?

SHA1 es definitivamente más preciso que CRC32, solo vea la tabla a continuación:

(Imagen tomada de un gran artículo: Hash Collision Probabilities).

CRC32 es de 32 bits, SHA1 es de 160 bits. Entonces, si marca 100 archivos, habrá aprox. 1 en un millón de posibilidades de que para dos de ellos los hashes CRC32 colisionen e informen los archivos como duplicados cuando no lo estén. Por otro lado, con SHA1 la posibilidad será de 9 órdenes de magnitud menos: aprox. 1 en 10 ^ 15.

Sin embargo, SHA1 también es más complejo de calcular, mientras que CRC32 es bastante simple. Puede tener sentido emplear ambos: CRC32 primero, y luego SHA1 para asegurarse de que los archivos con los mismos hash CRC32 sean duplicados entre sí.

Pero si está escribiendo una utilidad que encontrará y eliminará archivos duplicados, piense si puede permitirse incluso una probabilidad tan minúscula de un falso positivo. Probablemente tendrá que hacer una comparación bit a bit de los archivos como verificación final.

Actualización: también considere que para archivos grandes, el método más eficiente es no usar hashes de todo el archivo, sino leer y hash los archivos por bloques. De esta manera, podrá dejar de verificar tan pronto como llegue al primer bloque diferente.

Duplicate Files Deleter es una herramienta simple pero efectiva para localizar archivos duplicados en una o más rutas de búsqueda seleccionadas. Analiza los archivos y los compara según Byte para Byte Comparison, lo que garantiza una precisión del 100%. Luego puede elegir eliminar los archivos duplicados u originales seleccionados. El programa es multiproceso y realiza escaneos rápidamente.

Definitivamente optaría por SHA-1 si los recursos y el tiempo lo permiten. Puede ser difícil calcular CRC32 para archivos grandes y CRC32 es simplemente una función de comprobación de errores.

Recomendaría SHA-1 para casi todos los escenarios.