Binær filsammenligning — byte-for-byte-diff, blokjustering og bitniveauanalyse
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.
1. Vælg to filer
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.
2. Dom
Sammenligningsoversigten vises her, når begge filer er valgt og sammenlignet.
Forskelstæthed (rød: forskellige bytes, orange: bytes kun den ene fil har):
0x0
Bitniveauanalyse — hvilke bitpositioner er ændret (for hver forskellig byte, A XOR B):
3. Forskelle — hex-visning
| rød = fil A, grøn = fil B, identiske rækker udskrives én gang
Loading…
Forskelsblokke
Forskelstabel pr. byte
4. Blokjusteret visning (finder indsættelser og sletninger)
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.
5. Eksport
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?
Situation
Byte-for-byte-diffen siger
Den 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.