Confronto di file binari

Trascini due file e questa pagina li confronta byte per byte, direttamente nel browser: ogni offset diverso, un confronto esadecimale con il contesto circostante, una mappa di densità delle differenze e un'analisi a livello di bit che mostra quali bit sono cambiati. Una modalità allineata per blocchi separata rileva inserimenti ed eliminazioni nel mezzo di un file — il caso che un semplice confronto di byte non riesce ad allineare. I risultati si esportano in TXT e CSV. Nulla viene caricato da nessuna parte. Per modificare i byte invece di confrontarli, veda l'editor esadecimale; per il testo, lo strumento Differenze di testo.
FILE A
Trascini qui il primo file, oppure clicchi per sceglierlo
Fino a 200 MB. Resta su questo computer.
FILE B
Trascini qui il secondo file, oppure clicchi per sceglierlo
Confrontato con il File A.
Contesto esadecimale intorno a ogni differenza:  — le differenze vicine a meno di 16 byte l'una dall'altra sono mostrate come un unico blocco.
Il riepilogo del confronto comparirà qui quando entrambi i file saranno scelti e confrontati.
Un confronto byte per byte allinea l'offset N con l'offset N. Se sono stati inseriti o eliminati byte nel mezzo di un file, tutto ciò che segue si sposta e il confronto semplice segnala come diversa l'intera coda. Questa modalità calcola l'hash di blocchi da 1 KB, li confronta tra i due file e riporta il risultato come operazioni di copia / inserimento / eliminazione — il modo in cui strumenti di delta come xdelta vedono una modifica. È disponibile quando entrambi i file sono di 64 MB o meno.
Privacy: entrambi i file vengono letti con il FileReader del browser e confrontati in questa scheda — nessun server, nessun caricamento, nessuna memorizzazione. I file grandi vengono confrontati a blocchi da 1 MB, quindi anche input da 200 MB non occupano mai per intero la memoria (a meno che non usi la vista allineata per blocchi, che carica entrambi i file mentre lavora).

Cos'è il confronto di file binari?

Un confronto binario allinea due file all'offset 0 e procede in avanti, segnalando ogni offset in cui i byte differiscono — l'equivalente nel browser del classico comando cmp -l. Gli strumenti di differenze di testo non possono farlo: o si bloccano sui byte non stampabili o reinterpretano silenziosamente il file con qualche codifica di caratteri. Un confronto binario tratta entrambi i file esattamente per ciò che sono, cioè array di byte, che è ciò che serve per immagini di firmware, dump di dischi, file di database, blob cifrati o qualsiasi file di cui non si conosca il formato.

Tre domande ricevono risposta a tre livelli di profondità diversi. «Sono uguali?» è una questione di checksum — lo strumento risponde più in fretta, ma solo con sì o no. «Dove differiscono?» è il confronto di byte di questa pagina: offset, valori e quali bit sono cambiati. «Che tipo di modifica è?» è ciò che aggiunge la vista allineata per blocchi — se la differenza è una modifica sul posto, un blocco inserito o un blocco eliminato.

Confronto di byte contro allineamento per blocchi — perché due viste?

SituazioneIl confronto byte per byte diceLa vista allineata per blocchi dice
Un campo è stato sovrascritto sul posto (stessa dimensione del file) alcuni offset diversi sparsi lo stesso, più «tutto il resto viene copiato»
1 KB è stato inserito all'offset 2000 del file B tutto da 2000 in poi «differisce» copia 0–2000, inserisce 1 KB, copia il resto
Un blocco è stato eliminato nel mezzo del file B tutto da quel punto in poi «differisce» copia fino alla lacuna, elimina N byte, copia il resto
Il file B è il file A con un'intestazione diversa anteposta interi file «differiscono» elimina l'intestazione, poi un'unica lunga copia — cioè uno spostamento costante

Il confronto di byte è sempre corretto — quei byte differiscono davvero a quegli offset. È l'interpretazione a spostarsi quando sono stati inseriti o eliminati byte, esattamente come aggiungere una riga in cima a un file di testo fa cambiare il numero di ogni riga successiva.

Come leggere l'analisi a livello di bit

Per ogni byte diverso la pagina calcola A XOR B e conta quali posizioni di bit sono impostate. Questo istogramma è sorprendentemente espressivo: differenze concentrate nel bit 0 (il bit meno significativo di ogni byte) sono l'impronta della steganografia LSB, in cui un messaggio viene nascosto modificando il bit basso dei campioni di pixel o audio. Differenze distribuite uniformemente su tutte e otto le posizioni significano che sono stati riscritti interi valori. Differenze che toccano solo i bit alti di solito significano che un campo è stato sostituito con un valore di grandezza molto diversa. La distanza di Hamming (numero totale di bit ribaltati) quantifica la stessa cosa in un solo numero.

Una precisazione onesta: i dati casuali coincidono su un dato byte con probabilità 1/256, quindi due file non correlati della stessa dimensione coincidono comunque su circa lo 0,4% dei byte. Una somiglianza del 99,98% con qualche breve blocco di differenza è una modifica a livello di patch; una somiglianza dello 0,4% significa semplicemente che i file non sono correlati.

Errori comuni

«Tutto il file è rosso dopo la prima differenza.» — è l'effetto di spostamento descritto sopra, non una vera corruzione. Esegua la vista allineata per blocchi: se segnala un inserimento e due lunghe operazioni di copia, i file differiscono esattamente per quel blocco inserito. «I checksum coincidevano ma qui i file differiscono.» — se i digest SHA-256 coincidono, i file non differiscono; ricontrolli di aver aperto gli stessi file in entrambi gli strumenti. Una coincidenza di CRC-32, invece, non dimostra nulla contro una collisione deliberata. «Somiglianza 0,4%, ma ho cambiato solo una cosa.» — se la modifica era dentro un contenitore compresso o cifrato (ZIP, zTXt di PNG, volume cifrato), una sola modifica logica riscrive l'intero flusso compresso.

Domande frequenti

Qual è il limite di dimensione? — 200 MB per file per il confronto di byte, eseguito a blocchi da 1 MB. La vista allineata per blocchi carica entrambi i file, quindi è limitata a 64 MB per lato.
Rileva i blocchi spostati? — l'allineatore confronta i blocchi in ordine; un blocco spostato in un'altra posizione compare come un'eliminazione più un inserimento dello stesso contenuto, che è una descrizione corretta, anche se un po' brusca.
Può produrre un file di patch? — no, è uno strumento di analisi; i report CSV e TXT servono per documentazione e revisione, non per applicare modifiche.
Cosa succede ai miei file? — nulla: nessun server, nessuna memorizzazione, nessuna analisi; chiuda la scheda e ogni byte dell'input scompare.