¿Cómo comparar partes de archivos por hash?

¿Cómo comparar partes de archivos por hash?

Tengo un archivo descargado exitosamente y otra descarga fallida (solo los primeros 100 MB de un archivo grande) que sospecho que es el mismo archivo.

Para verificar esto, me gustaría verificar sus hashes, pero como solo tengo una parte del archivo descargado sin éxito, solo quiero aplicar hash a los primeros megabytes aproximadamente.

¿Cómo hago esto?

El sistema operativo sería Windows, pero tengo instalados cygwin y MinGW.

Respuesta1

Crear hashes para comparar archivos tiene sentido si compara un archivo con muchos, o cuando compara muchos archivos entre sí.

No tiene sentido comparar dos archivos solo una vez: el esfuerzo para calcular los hashes es al menos tan alto como caminar sobre los archivos y compararlos directamente.

Una herramienta eficaz de comparación de archivos es cmp:

cmp --bytes $((100 * 1024 * 1024)) file1 file2 && echo "File fragments are identical"

También puedes combinarlo ddpara comparar partes arbitrarias (no necesariamente desde el principio) de dos archivos, por ejemplo:

cmp \
    <(dd if=file1 bs=100M count=1 skip=1 2>/dev/null) \
    <(dd if=file2 bs=100M count=1 skip=1 2>/dev/null) \
&& echo "File fragments are identical"

Respuesta2

Lo siento, no puedo intentarlo exactamente, pero de esta manera funcionará.

dd if=yourfile.zip of=first100mb1.dat bs=100M count=1
dd if=yourotherfile.zip of=first100mb2.dat bs=100M count=1

Esto le dará los primeros 100 megabytes de ambos archivos.

Ahora obtén los hashes:

sha256sum first100mb1.dat && sha256sum first100mb2.dat 

También puedes ejecutarlo directamente:

dd if=yourfile.zip bs=100M count=1 | sha256sum 
dd if=yourotherfile.zip bs=100M count=1 | sha256sum 

Respuesta3

Todo el mundo parece seguir la ruta de Unix/Linux con esto, pero simplemente comparar 2 archivos se puede hacer fácilmente con los comandos estándar de Windows:
FC /B file file2

FC está presente en todas las versiones de Windows NT jamás creadas. Y (si no recuerdo mal) también estaba presente en DOS.
Es un poco lento, pero eso no importa si se usa una sola vez.

Respuesta4

Sé que dice Bash, pero OP también afirma que tienen Windows. Para cualquiera que quiera o requiera una solución de Windows, existe un programa llamado HxD que es un editor hexadecimal que puede comparar dos archivos. Si los archivos son de diferentes tamaños, le indicará si las piezas disponibles son las mismas. Y si es necesario, es capaz de ejecutar sumas de verificación para lo que esté seleccionado actualmente. Es gratuito y se puede descargar desde:el sitio web de HxD. No tengo ninguna conexión con los autores, solo lo he estado usando durante años.

información relacionada