Comparare binară a fișierelor

Se trag două fișiere, iar această pagină le compară octet cu octet, direct în browser: fiecare decalaj diferit, o diferență hexazecimală cu contextul din jur, o hartă a densității diferențelor și o analiză la nivel de bit care arată ce biți s-au schimbat. Un mod aliniat pe blocuri separat detectează inserții și ștergeri la mijlocul unui fișier — cazul pe care o diferență simplă octet cu octet nu îl poate alinia. Rezultatele se exportă în TXT și CSV. Nimic nu se încarcă nicăieri. Pentru modificarea octeților în loc de comparare, vezi editorul hexazecimal; pentru text, instrumentul Diferențe text.
FIȘIERUL A
Fișierul întâi se trage aici, sau se face clic pentru a-l alege
Până la 200 MB. Rămâne pe acest calculator.
FIȘIERUL B
Fișierul al doilea se trage aici, sau se face clic pentru a-l alege
Comparat cu Fișierul A.
Context hexazecimal în jurul fiecărei diferențe:  — diferențele vecine aflate la mai puțin de 16 octeți una de alta sunt afișate ca un singur bloc.
Rezumatul comparației apare aici după ce ambele fișiere sunt alese și comparate.
O diferență octet cu octet aliniază decalajul N cu decalajul N. Dacă s-au inserat sau șters octeți la mijloc într-un fișier, tot ce urmează de la acel punct se deplasează, iar diferența simplă raportează întreaga coadă ca diferită. Acest mod calculează rezumatele blocurilor de 1 KB, le potrivește între fișiere și raportează rezultatul ca operații de copiere / inserare / ștergere — așa cum văd o modificare instrumentele delta precum xdelta. Este disponibil când ambele fișiere au 64 MB sau mai puțin.
Confidențialitate: ambele fișiere sunt citite cu FileReader din browser și comparate în această filă — fără server, fără încărcare, fără stocare. Fișierele mari sunt comparate în felii de 1 MB, deci chiar și intrările de 200 MB nu stau niciodată complet în memorie deodată (cu excepția cazului în care se rulează vederea aliniată pe blocuri, care încarcă ambele fișiere cât timp lucrează).

Ce este comparația binară a fișierelor?

O comparație binară aliniază două fișiere la octetul 0 și merge înainte, raportând fiecare decalaj unde octeții diferă — echivalentul în browser al comenzii clasice cmp -l. Instrumentele de diff pentru text nu pot face asta: fie se blochează la octeții netipăribili, fie reinterpretează în liniște fișierul într-o codificare de caractere. O comparație binară tratează ambele fișiere exact ca ce sunt, adică vectori de octeți, ceea ce este necesar pentru imagini de firmware, dump-uri de disc, fișiere de bază de date, blocuri criptate sau orice fișier al cărui format nu este cunoscut.

Trei întrebări primesc răspuns la trei adâncimi diferite. „Sunt identice?” este o întrebare de sumă de control — instrumentul răspunde cel mai repede, dar doar da sau nu. „Unde diferă?” este diferența octet cu octet din această pagină: decalaje, valori și care biți s-au inversat. „Ce fel de schimbare este?” este ceea ce adaugă vederea aliniată pe blocuri — dacă diferența este o modificare pe loc, o porțiune inserată sau o porțiune ștearsă.

Diferență octet cu octet față de aliniere pe blocuri — de ce două vederi?

SituațieDiferența octet cu octet spuneVederea aliniată pe blocuri spune
Un câmp a fost suprascris pe loc (aceeași dimensiune a fișierului) câteva decalaje împrăștiate diferite la fel, plus „restul se copiază identic”
1 KB a fost inserat la decalajul 2000 al fișierului B tot ce este de la 2000 încolo „diferă” copiere 0–2000, inserare 1 KB, copiere restul
Un bloc a fost șters din mijlocul fișierului B tot ce este de la acel punct încolo „diferă” copiere până la gol, ștergere a N octeți, copiere restul
Fișierul B este fișierul A cu un alt antet adăugat în față fișierele întregi „diferă” ștergere antet, apoi o copiere lungă — adică o deplasare constantă

Diferența octet cu octet este întotdeauna corectă — acei octeți chiar diferă la acele decalaje. Ce se schimbă este interpretarea după ce s-au inserat sau șters octeți, exact ca atunci când se adaugă o linie la începutul unui fișier text și fiecare număr de linie care urmează se schimbă.

Cum se citește analiza la nivel de bit

Pentru fiecare octet diferit, pagina calculează A XOR B și numără ce poziții de bit sunt setate. Histograma aceasta este surprinzător de expresivă: diferențele concentrate în bitul 0 (cel mai puțin semnificativ bit al fiecărui octet) sunt amprenta stenografiei LSB, unde un mesaj este ascuns ajustând bitul cel mai puțin semnificativ al eșantioanelor de pixeli sau audio. Diferențele răspândite uniform pe toate cele opt poziții înseamnă că au fost rescrise valori întregi. Diferențele care ating doar biții de sus înseamnă de obicei că un câmp a fost înlocuit cu o valoare de ordin de mărime foarte diferit. Distanța Hamming (numărul total de biți care diferă) cuantifică același lucru într-un singur număr.

O precizare onestă: datele aleatorii coincid pe un octet dat cu probabilitatea 1/256, deci două fișiere fără legătură, de aceeași dimensiune, tot se potrivesc pe aproximativ 0,4% din octeți. O similaritate de 99,98% cu câteva blocuri scurte de diferență este o modificare la nivel de patch; o similaritate de 0,4% înseamnă pur și simplu că fișierele nu au legătură.

Greșeli frecvente

„Tot fișierul este roșu după prima diferență.” — acesta este efectul de deplasare descris mai sus, nu o corupere reală. Se rulează vederea aliniată pe blocuri: dacă raportează o inserție și două operații lungi de copiere, fișierele diferă exact prin acea porțiune inserată. „Sumele de control se potrivesc, dar fișierele diferă aici.” — dacă rezumatele SHA-256 se potrivesc, fișierele nu diferă; se verifică din nou că s-au deschis aceleași fișiere în ambele instrumente. O potrivire CRC-32, pe de altă parte, nu demonstrează nimic împotriva unei coliziuni intenționate. „Similaritate 0,4%, dar am schimbat un singur lucru.” — dacă modificarea a fost în interiorul unui container comprimat sau criptat (ZIP, PNG zTXt, volum criptat), o singură schimbare logică rescrie întreg fluxul comprimat.

Întrebări frecvente

Care este limita de dimensiune? — 200 MB per fișier pentru diferența octet cu octet, comparate în felii de 1 MB. Vederea aliniată pe blocuri încarcă ambele fișiere, deci este limitată la 64 MB pe fiecare parte.
Detectează porțiuni mutate? — aliniatorul potrivește blocurile în ordine; o porțiune mutată într-o altă poziție apare ca o ștergere plus o inserție a aceluiași conținut, ceea ce este o descriere corectă, deși cam directă.
Poate produce un fișier de patch? — nu, este un instrument de analiză; rapoartele CSV și TXT sunt pentru documentare și revizuire, nu pentru aplicarea modificărilor.
Ce se întâmplă cu fișierele? — nimic: fără server, fără stocare, fără analize; se închide fila și fiecare octet de intrare dispare.