Binær filsammenligning

Slip to filer, og siden sammenligner dem byte for byte, direkte i browseren: hvert forskellige offset, en hex-diff med omgivende kontekst, et kort over forskelstæthed og en bitniveauanalyse, der viser hvilke bit der er ændret. En særskilt blokjusteret tilstand finder indsættelser og sletninger midt i en fil — det tilfælde, en almindelig byte-diff ikke kan justere. Resultater eksporteres til TXT og CSV. Intet uploades nogen steder. Til redigering af bytes i stedet for sammenligning, se hex-editoren; til tekst, Tekst-diff-værktøjet.
FIL A
Slip den første fil her, eller klik for at vælge
Op til 200 MB. Forbliver på denne maskine.
FIL B
Slip den anden fil her, eller klik for at vælge
Sammenlignet med fil A.
Hex-kontekst omkring hver forskel:  — naboforskelle tættere end 16 bytes vises som én blok.
Sammenligningsoversigten vises her, når begge filer er valgt og sammenlignet.
En byte-for-byte-diff stiller offset N op mod offset N. Hvis bytes er indsat eller slettet midt i den ene fil, forskydes alt efter det punkt, og den almindelige diff rapporterer hele halen som forskellig. Denne tilstand hasher 1 KB-blokke, matcher dem mellem filerne og rapporterer resultatet som kopiér / indsæt / slet-operationer — sådan som delta-værktøjer som xdelta ser en ændring. Tilgængelig, når begge filer er 64 MB eller mindre.
Privatliv: begge filer læses med browserens egen FileReader og sammenlignes i denne fane — ingen server, ingen upload, ingen lagring. Store filer sammenlignes i 1 MB-skiver, så selv 200 MB-input aldrig ligger helt i hukommelsen på én gang (medmindre man kører den blokjusterede visning, der indlæser begge filer, mens den arbejder).

Hvad er binær filsammenligning?

En binær sammenligning stiller to filer op ved byte 0 og går fremad og rapporterer hver offset, hvor bytes er forskellige — browserens udgave af den klassiske cmp -l-kommando. Tekst-diff-værktøjer kan ikke det: de kvæles enten af ikke-udskrivbare bytes eller fortolker filen lydløst i en tegnkodning. En binær sammenligning behandler begge filer præcis, som det de er, nemlig arrays af bytes, og det er netop det, man ønsker ved firmwarebilleder, diskdumps, databasefiler, krypterede blobs eller enhver fil, hvis format man ikke kender.

Tre spørgsmål får svar på tre forskellige dybder. “Er de ens?” er et checksum-spørgsmål — værktøjet svarer hurtigst, men kun ja eller nej. “Hvor adskiller de sig?” er byte-diffen på denne side: offsets, værdier og hvilke bit der er vendt. “Hvilken type ændring er det?” er det, blokjusteringsvisningen tilføjer — om forskellen er en redigering på stedet, et indsat stykke eller et slettet stykke.

Byte-diff vs. blokjustering — hvorfor to visninger?

SituationByte-for-byte-diffen sigerDen blokjusterede visning siger
Et felt blev overskrevet på stedet (samme filstørrelse) nogle få spredte forskellige offsets samme, plus “alt andet kopieres over”
1 KB blev indsat ved offset 2000 i fil B alt fra 2000 og frem “er forskelligt” kopiér 0–2000, indsæt 1 KB, kopiér resten
En blok blev slettet midt i fil B alt fra det punkt og frem “er forskelligt” kopiér op til hullet, slet N bytes, kopiér resten
Fil B er fil A med en anden header foran hele filer “er forskellige” slet headeren, derefter én lang kopi — altså et konstant skift

Byte-diffen er altid korrekt — de bytes er faktisk forskellige ved de offsets. Det er fortolkningen, der forskydes, når bytes er blevet indsat eller slettet, ligesom det at tilføje en linje øverst i en tekstfil får alle efterfølgende linjenumre til at ændre sig.

Sådan læses bitniveauanalysen

For hver forskellig byte beregner siden A XOR B og tæller, hvilke bitpositioner der er sat. Det histogram er overraskende udtryksfuldt: forskelle koncentreret i bit 0 (den mindst betydende bit i hver byte) er fingeraftrykket af LSB-steganografi, hvor en besked skjules ved at skubbe den laveste bit i pixel- eller lydsamples. Forskelle fordelt jævnt over alle otte positioner betyder, at hele værdier er blevet omskrevet. Forskelle, der kun rører høje bit, betyder typisk, at et felt er blevet erstattet af en værdi med en meget anden størrelsesorden. Hamming-afstanden (det samlede antal vendte bit) kvantificerer det samme i ét tal.

Ét ærligt forbehold: tilfældige data falder sammen med sandsynligheden 1/256 på en given byte, så to ikke-relaterede filer af samme størrelse vil stadig matche på omkring 0,4 % af bytes. En lighed på 99,98 % med en håndfuld korte forskelsblokke er en ændring på patch-niveau; en lighed på 0,4 % betyder, at filerne simpelthen ikke er relaterede.

Almindelige fejl

“Hele filen er rød efter den første forskel.” — det er forskydningseffekten beskrevet ovenfor, ikke reel korruption. Kør blokjusteringsvisningen: hvis den rapporterer én indsættelse og to lange kopieringsoperationer, adskiller filerne sig præcis med det indsatte stykke. “Checksums matchede, men filerne er forskellige her.” — hvis SHA-256-digests matcher, er filerne ikke forskellige; kontrollér, at de samme filer er åbnet i begge værktøjer. Et CRC-32-match beviser derimod intet over for en bevidst kollision. “Lighed 0,4 %, men jeg ændrede kun én ting.” — hvis redigeringen lå inde i en komprimeret eller krypteret beholder (ZIP, PNG zTXt, krypteret volumen), omskriver én logisk ændring hele den komprimerede strøm.

Ofte stillede spørgsmål

Hvad er størrelsesgrænsen? — 200 MB pr. fil for byte-diffen, sammenlignet i 1 MB-skiver. Blokjusteringsvisningen indlæser begge filer, så den er begrænset til 64 MB pr. side.
Opdager den flyttede stykker? — justeringen matcher blokke i rækkefølge; et stykke flyttet til en anden position vises som en sletning plus en indsættelse af det samme indhold, hvilket er en korrekt, men lidt kluntet beskrivelse.
Kan den lave en patchfil? — nej, det er et analyseværktøj; CSV- og TXT-rapporterne er til dokumentation og gennemgang, ikke til at anvende ændringer.
Hvad sker der med mine filer? — ingenting: ingen server, ingen lagring, ingen analyse; luk fanen, og alle inputbytes er væk.