Jämför binära filer

Släpp två filer så jämför den här sidan dem byte för byte, direkt i webbläsaren: varje avvikande position, en hex-diff med omgivande kontext, en karta över skillnadstäthet och en bitnivåanalys som visar vilka bitar som ändrats. Ett separat blockjusterat läge upptäcker infogningar och borttagningar mitt i en fil — fallet som en vanlig bytediff inte kan justera. Resultaten kan exporteras som TXT och CSV. Ingenting laddas upp någonstans. För att redigera byte i stället för att jämföra, se hex-redigeraren; för text, verktyget Textdiff.
FIL A
Släpp den första filen här, eller klicka för att välja
Upp till 200 MB. Stannar på den här datorn.
FIL B
Släpp den andra filen här, eller klicka för att välja
Jämförd med fil A.
Hexadecimal kontext runt varje skillnad:  — närliggande skillnader som ligger närmare än 16 byte visas som ett block.
Jämförelsesammanfattningen visas här när båda filerna har valts och jämförts.
En byte-för-byte-diff jämför position N med position N. Om byte har infogats eller tagits bort mitt i ena filen förskjuts allt efter den punkten, och en vanlig diff rapporterar hela svansen som avvikande. Detta läge beräknar hash för 1 KB-block, matchar dem mellan filerna och rapporterar resultatet som kopiera / infoga / ta bort-operationer — så som deltaverktyg som xdelta ser en ändring. Tillgängligt när båda filerna är 64 MB eller mindre.
Integritet: båda filerna läses med webbläsarens egna FileReader och jämförs i den här fliken — ingen server, ingen uppladdning, ingen lagring. Stora filer jämförs i 1 MB-skivor, så även indata på 200 MB ligger aldrig helt i minnet samtidigt (om man inte kör den blockjusterade vyn, som läser in båda filerna medan den arbetar).

Vad är jämförelse av binärfiler?

En binär jämförelse ställer två filer på linje vid byte 0 och går framåt, och rapporterar varje position där byten skiljer sig — webbläsarmotsvarigheten till det klassiska kommandot cmp -l. Textdiffverktyg kan inte göra detta: de antingen kvävs av icke-utskrivbara byte eller tolkar tyst om filen i någon teckenkodning. En binär jämförelse behandlar båda filerna precis som vad de är, arrayer av byte, vilket är det man vill ha för firmwarebilder, diskdumpar, databasfiler, krypterade blobbar eller alla filer vars format man inte känner till.

Tre frågor besvaras på tre olika djup. “Är de likadana?” är en kontrollsummefråga — verktyget svarar snabbast på den, men bara med ja eller nej. “Var skiljer de sig?” är bytediffen på den här sidan: positioner, värden och vilka bitar som vänts. “Vilken typ av ändring är det?” är vad den blockjusterade vyn tillför — om skillnaden är en redigering på plats, en infogad del eller en borttagen del.

Byte-diff kontra blockjustering — varför två vyer?

LägeByte-för-byte-diff sägerBlockjusterad vy säger
Ett fält skrevs över på plats (samma filstorlek) några spridda avvikande positioner samma, plus “allt annat kopieras över”
1 KB infogades vid position 2000 i fil B allt från 2000 och framåt “skiljer sig” kopiera 0–2000, infoga 1 KB, kopiera resten
Ett block togs bort mitt i fil B allt från den punkten och framåt “skiljer sig” kopiera fram till luckan, ta bort N byte, kopiera resten
Fil B är fil A med ett annat huvud framför hela filer “skiljer sig” ta bort huvudet, sedan en lång kopiering — alltså en konstant förskjutning

Bytediffen är alltid korrekt — de bytena skiljer sig verkligen på de positionerna. Det är tolkningen som förskjuts när byte har infogats eller tagits bort, precis som att lägga till en rad överst i en textfil gör att varje efterföljande radnummer ändras.

Så läses bitnivåanalysen

För varje avvikande byte beräknar sidan A XOR B och räknar vilka bitpositioner som är satta. Histogrammet är överraskande uttrycksfullt: skillnader koncentrerade till bit 0 (den minst signifikanta biten i varje byte) är fingeravtrycket av LSB-steganografi, där ett meddelande göms genom att flytta den lägsta biten i bildpixlar eller ljudsampel. Skillnader jämnt fördelade över alla åtta positioner betyder att hela värden skrivits om. Skillnader som bara berör höga bitar betyder oftast att ett fält ersatts med ett värde av mycket annan storleksordning. Det Hamming-avståndet (totalt antal vända bitar) kvantifierar samma sak i ett enda tal.

En ärlig reservation: slumpmässig data sammanfaller på en given byte med sannolikheten 1/256, så två orelaterade filer av samma storlek stämmer ändå överens på cirka 0,4 % av byten. En likhet på 99,98 % med ett fåtal korta skillnadsblock är en ändring på patchnivå; en likhet på 0,4 % betyder att filerna helt enkelt inte hör ihop.

Vanliga misstag

“Hela filen är röd efter den första skillnaden.” — det är förskjutningseffekten som beskrivs ovan, inte verklig korruption. Kör den blockjusterade vyn: om den rapporterar en infogning och två långa kopieringsoperationer skiljer sig filerna just med den infogade delen. “Kontrollsummorna stämde men filerna skiljer sig här.” — om SHA-256-digesten stämmer skiljer sig filerna inte; kontrollera att samma filer öppnades i båda verktygen. En CRC-32-träff bevisar däremot ingenting mot en avsiktlig kollision. “Likhet 0,4 %, men jag ändrade bara en sak.” — om ändringen gjordes inuti en komprimerad eller krypterad behållare (ZIP, PNG zTXt, krypterad volym) skriver en logisk ändring om hela den komprimerade strömmen.

Vanliga frågor

Vilken är storleksgränsen? — 200 MB per fil för bytediffen, jämförd i 1 MB-skivor. Den blockjusterade vyn läser in båda filerna, så den begränsas till 64 MB per sida.
Upptäcker den flyttade delar? — justeraren matchar block i ordning; en del som flyttats till en annan position visas som en borttagning plus en infogning av samma innehåll, vilket är en korrekt, om än något trubbig, beskrivning.
Kan den skapa en patchfil? — nej, det är ett analysverktyg; CSV- och TXT-rapporterna är till för dokumentation och granskning, inte för att tillämpa ändringar.
Vad händer med mina filer? — ingenting: ingen server, ingen lagring, ingen analys; stäng fliken och varje byte av indata är borta.