Binær filsammenligning

Slipp to filer, så sammenligner denne siden dem byte for byte, rett i nettleseren: hver avvikende forskyvning, en heksforskjell med omkringliggende kontekst, et kart over forskjellstetthet og en bitanalyse som viser hvilke bit som endret seg. En egen blokkjustert modus oppdager innsettinger og slettinger midt i en fil — tilfellet en vanlig byte-forskjell ikke kan justere. Resultatene eksporteres til TXT og CSV. Ingenting lastes opp noe sted. For å redigere byte i stedet for å sammenligne dem, se heksredigereren; for tekst, verktøyet Tekstdiff.
FIL A
Slipp den første filen her, eller klikk for å velge
Opptil 200 MB. Blir på denne maskinen.
FIL B
Slipp den andre filen her, eller klikk for å velge
Sammenlignet med fil A.
Heksekontekst rundt hver forskjell:  — naboforskjeller nærmere hverandre enn 16 byte vises som én blokk.
Sammenligningsoppsummeringen vises her når begge filene er valgt og sammenlignet.
En byte-for-byte-forskjell legger forskyvning N opp mot forskyvning N. Hvis byte ble satt inn eller slettet midt i den ene filen, forskyves alt etter det punktet, og den vanlige forskjellen rapporterer hele halen som forskjellig. Denne modusen hasher 1 KB-blokker, matcher dem mellom filene og rapporterer resultatet som kopier / sett inn / slett-operasjoner — slik som deltaverktøy som xdelta ser en endring. Tilgjengelig når begge filene er 64 MB eller mindre.
Personvern: begge filene leses med nettleserens egen FileReader og sammenlignes i denne fanen — ingen server, ingen opplasting, ingen lagring. Store filer sammenlignes i 1 MB-skiver, så selv 200 MB-inndata ligger aldri hele i minnet samtidig (med mindre man kjører den blokkjusterte visningen, som laster begge filene mens den arbeider).

Hva er sammenligning av binærfiler?

En binærsammenligning legger to filer opp ved byte 0 og går framover, og rapporterer hver forskyvning der bytene er forskjellige — nettleserversjonen av den klassiske kommandoen cmp -l. Tekstdifferverktøy kan ikke dette: de enten kveles av ikke-utskrivbare byte eller tolker filen stille på nytt i et tegnsett. En binærsammenligning behandler begge filene for akkurat det de er, rekker av byte, og det er det man vil ha for firmwarebilder, diskdumper, databasefiler, krypterte blobber eller enhver fil hvis format man ikke kjenner.

Tre spørsmål besvares på tre ulike dybder. «Er de like?» er et kontrollsumspørsmål — verktøyet svarer raskest, men bare ja eller nei. «Hvor er de forskjellige?» er byte-for-byte-forskjellen på denne siden: forskyvninger, verdier og hvilke bit som snudde. «Hva slags endring er det?» er det blokkjusterte visningen legger til — om forskjellen er en redigering på stedet, en innsatt del eller en slettet del.

Byte-for-byte-forskjell kontra blokkjustering — hvorfor to visninger?

SituasjonByte-for-byte-forskjellen sierDen blokkjusterte visningen sier
Et felt ble overskrevet på stedet (samme filstørrelse) noen få spredte avvikende forskyvninger det samme, pluss «alt annet kopieres over»
1 KB ble satt inn ved forskyvning 2000 i fil B alt fra 2000 og utover «avviker» kopier 0–2000, sett inn 1 KB, kopier resten
En blokk ble slettet midt i fil B alt fra det punktet og utover «avviker» kopier opp til hullet, slett N byte, kopier resten
Fil B er fil A med en annen header foran hele filene «avviker» slett headeren, deretter én lang kopi — altså en konstant forskyvning

Byte-for-byte-forskjellen er alltid korrekt — de bytene er virkelig forskjellige ved de forskyvningene. Det er tolkningen som forskyves når byte er satt inn eller slettet, akkurat som når man legger til en linje øverst i en tekstfil og alle påfølgende linjenumre endres.

Slik leser bitanalysen

For hver avvikende byte beregner siden A XOR B og teller hvilke bitposisjoner som er satt. Dette histogrammet er overraskende uttrykksfullt: forskjeller konsentrert i bit 0 (den minst signifikante biten i hver byte) er fingeravtrykket av LSB-steganografi, der en melding skjules ved å flytte den laveste biten i piksel- eller lydsamplene litt. Forskjeller jevnt fordelt over alle åtte posisjonene betyr at hele verdier ble skrevet om. Forskjeller som bare berører de høye bitene betyr vanligvis at ett felt ble erstattet med en verdi av helt annen størrelsesorden. Hamming-avstanden (totalt antall snudde bit) kvantifiserer det samme i ett tall.

En ærlig forbehold: tilfeldige data sammenfaller på et gitt byte med sannsynlighet 1/256, så to ubeslektede filer av samme størrelse stemmer fortsatt på omtrent 0,4 % av bytene. En likhet på 99,98 % med en håndfull korte forskjellsblokker er en endring på patch-nivå; en likhet på 0,4 % betyr at filene simpelthen ikke er beslektet.

Vanlige feil

«Hele filen er rød etter den første forskjellen.» — det er forskyvningseffekten beskrevet over, ikke ekte ødeleggelse. Kjør den blokkjusterte visningen: hvis den rapporterer én innsetting og to lange kopieringsoperasjoner, skiller filene seg nøyaktig med den innsatte delen. «Kontrollsummene stemte, men filene er forskjellige her.» — hvis SHA-256-digestene stemmer, er ikke filene forskjellige; kontroller at man åpnet de samme filene i begge verktøyene. En CRC-32-treff beviser derimot ingenting mot en bevisst kollisjon. «Likhet 0,4 %, men jeg endret bare én ting.» — hvis redigeringen lå inne i en komprimert eller kryptert beholder (ZIP, PNG zTXt, kryptert volum), skriver én logisk endring om hele den komprimerte strømmen.

Ofte stilte spørsmål

Hva er størrelsesgrensen? — 200 MB per fil for byte-for-byte-forskjellen, sammenlignet i 1 MB-skiver. Den blokkjusterte visningen laster begge filene, så den er begrenset til 64 MB per side.
Oppdager den flyttede deler? — justeringen matcher blokker i rekkefølge; en del som er flyttet til en annen posisjon vises som en sletting pluss en innsetting av samme innhold, en korrekt, men litt grov beskrivelse.
Kan den lage en patch-fil? — nei, det er et analyseverktøy; CSV- og TXT-rapportene er til dokumentasjon og gjennomgang, ikke for å ta i bruk endringer.
Hva skjer med filene mine? — ingenting: ingen server, ingen lagring, ingen analyse; lukk fanen, så er alle inndatabyte borte.