Como comparar partes de arquivos por hash?

Como comparar partes de arquivos por hash?

Tenho um arquivo baixado com êxito e outro com falha no download (apenas os primeiros 100 MB de um arquivo grande) que suspeito ser o mesmo arquivo.

Para verificar isso, gostaria de verificar seus hashes, mas como tenho apenas uma parte do arquivo baixado sem sucesso, quero fazer o hash apenas dos primeiros megabytes ou mais.

Como eu faço isso?

O sistema operacional seria Windows, mas tenho o cygwin e o MinGW instalados.

Responder1

Criar hashes para comparar arquivos faz sentido se você comparar um arquivo com vários ou ao comparar muitos arquivos entre si.

Não faz sentido comparar dois arquivos apenas uma vez: o esforço para calcular os hashes é pelo menos tão grande quanto percorrer os arquivos e compará-los diretamente.

Uma ferramenta eficiente de comparação de arquivos é cmp:

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

Você também pode combiná-lo ddpara comparar partes arbitrárias (não necessariamente desde o início) de dois arquivos, por exemplo:

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"

Responder2

Lamento não poder exatamente tentar isso, mas desta forma funcionará

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

Isso lhe dará os primeiros 100 megabytes de ambos os arquivos.

Agora pegue os hashes:

sha256sum first100mb1.dat && sha256sum first100mb2.dat 

Você também pode executá-lo diretamente:

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

Responder3

Todo mundo parece seguir o caminho Unix/Linux com isso, mas apenas comparar 2 arquivos pode ser feito facilmente com comandos padrão do Windows:
FC /B file file2

O FC está presente em todas as versões do Windows NT já feitas. E (se bem me lembro) também estava presente no DOS.
É um pouco lento, mas isso não importa para um uso único.

Responder4

Eu sei que diz para o Bash, mas o OP também afirma que eles têm Windows. Para quem deseja/precisa de uma solução Windows, existe um programa chamado HxD que é um editor hexadecimal que pode comparar dois arquivos. Se os arquivos forem de tamanhos diferentes, ele informará se as peças disponíveis são iguais. E se necessário, é capaz de executar somas de verificação para tudo o que estiver selecionado no momento. É gratuito e pode ser baixado em:o site da HxD. Não tenho nenhuma ligação com o(s) autor(es), apenas o uso há anos.

informação relacionada