Comparação de ficheiros binários

Largue dois ficheiros e esta página compara-os byte a byte, dentro do seu navegador: cada posição diferente, uma diferença hexadecimal com o contexto à volta, um mapa de densidade de diferenças e uma análise ao nível dos bits que mostra que bits mudaram. Um modo de blocos alinhados separado deteta inserções e remoções no meio de um ficheiro — o caso que uma diferença byte a byte simples não consegue alinhar. Os resultados exportam para TXT e CSV. Nada é enviado para lado nenhum. Para editar bytes em vez de comparar, veja o editor hexadecimal; para texto, a ferramenta Diferenças de texto.
FICHEIRO A
Largue aqui o primeiro ficheiro, ou clique para escolher
Até 200 MB. Fica nesta máquina.
FICHEIRO B
Largue aqui o segundo ficheiro, ou clique para escolher
Comparado com o Ficheiro A.
Contexto hexadecimal em volta de cada diferença:  — diferenças vizinhas a menos de 16 bytes são mostradas como um único bloco.
O resumo da comparação aparece aqui depois de os dois ficheiros serem escolhidos e comparados.
Uma diferença byte a byte alinha a posição N com a posição N. Se bytes foram inseridos ou apagados no meio de um ficheiro, tudo o que vem depois desloca-se e a diferença simples reporta a cauda inteira como diferente. Este modo calcula o hash de blocos de 1 KB, coincide-os entre os ficheiros e apresenta o resultado como operações de copiar / inserir / apagar — a forma como ferramentas de delta como o xdelta veem uma alteração. Disponível quando ambos os ficheiros têm 64 MB ou menos.
Privacidade: os dois ficheiros são lidos com o FileReader do próprio navegador e comparados neste separador — sem servidor, sem envio, sem armazenamento. Os ficheiros grandes são comparados em fatias de 1 MB, por isso mesmo entradas de 200 MB nunca ficam inteiras na memória de uma vez (exceto se executar a vista de alinhamento de blocos, que carrega os dois ficheiros enquanto trabalha).

O que é a comparação de ficheiros binários?

Uma comparação binária alinha dois ficheiros no byte 0 e avança, registando cada posição em que os bytes diferem — o equivalente no navegador do clássico comando cmp -l. As ferramentas de diferença de texto não conseguem fazer isto: ou se engasgam com bytes não imprimíveis, ou reinterpretam em silêncio o ficheiro numa qualquer codificação de caracteres. Uma comparação binária trata os dois ficheiros exatamente como são, matrizes de bytes, que é o que se quer para imagens de firmware, despejos de disco, ficheiros de base de dados, blobs cifrados ou qualquer ficheiro cujo formato não se conhece.

Três perguntas recebem respostas a três profundidades diferentes. « São iguais? » é uma questão de soma de verificação — a ferramenta responde-lhe mais depressa, mas só com sim ou não. « Onde diferem? » é a diferença byte a byte desta página: posições, valores e que bits viraram. « Que tipo de alteração é? » é o que a vista de alinhamento de blocos acrescenta — se a diferença é uma edição no próprio lugar, um bloco inserido ou um bloco apagado.

Diferença byte a byte vs. alinhamento de blocos — porquê duas vistas?

SituaçãoA diferença byte a byte dizA vista de alinhamento de blocos diz
Um campo foi reescrito no próprio lugar (mesmo tamanho de ficheiro) algumas posições dispersas diferentes o mesmo, mais « todo o resto é copiado »
Foi inserido 1 KB na posição 2000 do ficheiro B tudo a partir de 2000 « difere » copiar 0–2000, inserir 1 KB, copiar o resto
Um bloco foi apagado a meio do ficheiro B tudo a partir desse ponto « difere » copiar até ao espaço, apagar N bytes, copiar o resto
O ficheiro B é o ficheiro A com um cabeçalho diferente à frente ficheiros inteiros « diferem » apagar o cabeçalho e depois uma cópia longa — ou seja, um deslocamento constante

A diferença byte a byte está sempre correta — esses bytes realmente diferem nessas posições. É a interpretação que se desloca quando se inseriram ou apagaram bytes, exatamente como acrescentar uma linha no topo de um ficheiro de texto faz mudar todos os números de linha seguintes.

Como lê a análise ao nível dos bits

Para cada byte diferente a página calcula A XOR B e conta quais as posições de bit ativas. Esse histograma é surpreendentemente expressivo: diferenças concentradas no bit 0 (o bit menos significativo de cada byte) são a impressão digital da esteganografia LSB, em que uma mensagem é escondida ao empurrar o bit baixo de amostras de pixel ou de áudio. Diferenças espalhadas uniformemente pelas oito posições significam que valores inteiros foram reescritos. Diferenças que tocam apenas os bits altos costumam significar que um campo foi substituído por um valor de magnitude muito diferente. A distância de Hamming (contagem total de bits virados) quantifica o mesmo num único número.

Uma ressalva honesta: dados aleatórios coincidem em qualquer byte dado com probabilidade 1/256, por isso dois ficheiros não relacionados do mesmo tamanho ainda coincidem em cerca de 0,4% dos bytes. Uma semelhança de 99,98% com um punhado de blocos curtos de diferença é uma alteração ao nível de remendo; uma semelhança de 0,4% significa simplesmente que os ficheiros não têm nada a ver um com o outro.

Erros comuns

« O ficheiro inteiro fica a vermelho depois da primeira diferença. » — isso é o efeito de deslocamento descrito acima, não corrupção real. Use a vista de alinhamento de blocos: se reportar uma inserção e duas cópias longas, os ficheiros diferem exatamente nesse bloco inserido. « As somas de verificação coincidiram mas os ficheiros diferem aqui. » — se os resumos SHA-256 coincidem, os ficheiros não diferem; verifique de novo se abriu os mesmos ficheiros nas duas ferramentas. Uma coincidência de CRC-32, por outro lado, não prova nada contra uma colisão deliberada. « Semelhança de 0,4%, mas só mudei uma coisa. » — se a sua edição estava dentro de um contentor comprimido ou cifrado (ZIP, zTXt de PNG, volume cifrado), uma alteração lógica reescreve o fluxo comprimido inteiro.

Dúvidas frequentes

Qual é o limite de tamanho? — 200 MB por ficheiro para a diferença byte a byte, comparados em fatias de 1 MB. A vista de alinhamento de blocos carrega os dois ficheiros, por isso está limitada a 64 MB por lado.
Deteta blocos movidos? — o alinhador coincide os blocos por ordem; um bloco movido para outra posição aparece como uma remoção mais uma inserção do mesmo conteúdo, o que é uma descrição correta, ainda que um pouco rude.
Consegue produzir um ficheiro de remendo? — não, é uma ferramenta de análise; os relatórios CSV e TXT servem para documentação e revisão, não para aplicar alterações.
O que acontece aos meus ficheiros? — nada: sem servidor, sem armazenamento, sem análise; feche o separador e todos os bytes de entrada desaparecem.