Porównanie plików binarnych

Upuść dwa pliki, a ta strona porówna je bajt po bajcie, w całości w przeglądarce: każde różniące się przesunięcie, różnicę szesnastkową z kontekstem, mapę gęstości różnic i analizę na poziomie bitów, która pokazuje, które bity się zmieniły. Osobny tryb z wyrównaniem bloków wykrywa wstawienia i usunięcia w środku pliku — przypadek, którego zwykła różnica bajtowa nie potrafi wyrównać. Wyniki eksportują się do TXT i CSV. Nic nie jest nigdzie wysyłane. Do edycji bajtów zamiast porównywania służy edytor hex, a do tekstu narzędzie Porównanie tekstów.
PLIK A
Upuść tutaj pierwszy plik albo kliknij, aby wybrać
Do 200 MB. Pozostaje na tym komputerze.
PLIK B
Upuść tutaj drugi plik albo kliknij, aby wybrać
Porównano z plikiem A.
Kontekst szesnastkowy wokół każdej różnicy:  — sąsiednie różnice bliższe niż 16 bajtów są pokazane jako jeden blok.
Podsumowanie porównania pojawi się tutaj, gdy oba pliki zostaną wybrane i porównane.
Różnica bajt po bajcie dopasowuje przesunięcie N do przesunięcia N. Jeśli bajty zostały wstawione lub usunięte w środku jednego pliku, wszystko po tym miejscu się przesuwa i zwykła różnica zgłasza cały ogon jako różny. Ten tryb haszuje bloki po 1 KB, dopasowuje je między plikami i raportuje wynik jako operacje kopiuj / wstaw / usuń — tak zmianę widzą narzędzia delta, takie jak xdelta. Dostępne, gdy oba pliki mają 64 MB lub mniej.
Prywatność: oba pliki są czytane przez wbudowane w przeglądarkę FileReader i porównywane w tej karcie — bez serwera, bez wysyłania, bez zapisu. Duże pliki porównywane są w fragmentach po 1 MB, więc nawet 200-megabajtowe wejścia nigdy nie leżą w całości w pamięci naraz (chyba że włączono widok z wyrównaniem bloków, który wczytuje oba pliki podczas pracy).

Czym jest porównanie plików binarnych?

Porównanie binarne ustawia dwa pliki od bajtu 0 i idzie do przodu, zgłaszając każde przesunięcie, w którym bajty się różnią — odpowiednik w przeglądarce klasycznego polecenia cmp -l. Narzędzia do różnic tekstowych tego nie potrafią: albo zawodzą na niedrukowalnych bajtach, albo po cichu reinterpretują plik w jakimś kodowaniu znaków. Porównanie binarne traktuje oba pliki dokładnie takimi, jakimi są, czyli tablicami bajtów — a tego właśnie potrzeba przy obrazach firmware, zrzutach dysku, plikach baz danych, zaszyfrowanych blobach lub każdym pliku, którego format nie jest znany.

Na trzy pytania odpowiadamy na trzech poziomach szczegółowości. “Czy są takie same?” to pytanie o sumę kontrolną — narzędzie odpowiada na nie najszybciej, ale tylko tak lub nie. “Gdzie się różnią?” to różnica bajtowa na tej stronie: przesunięcia, wartości i to, które bity się odwróciły. “Jaki to rodzaj zmiany?” to to, co dodaje widok z wyrównaniem bloków — czy różnica to edycja w miejscu, wstawiony fragment, czy usunięty fragment.

Różnica bajtowa a wyrównanie bloków — po co dwa widoki?

SytuacjaRóżnica bajt po bajcie mówiWidok z wyrównaniem bloków mówi
Pole zostało nadpisane w miejscu (ten sam rozmiar pliku) kilka rozproszonych przesunięć z różnicami to samo, plus „reszta kopiuje się bez zmian”
Wstawiono 1 KB na przesunięciu 2000 pliku B wszystko od 2000 wzwyż „się różni” kopiuj 0–2000, wstaw 1 KB, kopiuj resztę
Usunięto blok w środku pliku B wszystko od tego miejsca wzwyż „się różni” kopiuj do luki, usuń N bajtów, kopiuj resztę
Plik B to plik A z innym nagłówkiem z przodu całe pliki „się różnią” usuń nagłówek, potem jedna długa kopia — czyli stałe przesunięcie

Różnica bajtowa jest zawsze poprawna — te bajty naprawdę różnią się na tych przesunięciach. Zmienia się interpretacja, gdy bajty zostały wstawione lub usunięte, dokładnie tak jak dodanie wiersza na początku pliku tekstowego zmienia numery wszystkich kolejnych wierszy.

Jak czytać analizę na poziomie bitów

Dla każdego różnego bajtu strona oblicza A XOR B i liczy, które pozycje bitów są ustawione. Ten histogram jest zaskakująco wymowny: różnice skupione w bicie 0 (najmniej znaczącym bicie każdego bajtu) to odcisk palca steganografii LSB, w której wiadomość ukrywa się, lekko zmieniając najniższy bit próbek pikseli lub audio. Różnice rozłożone równomiernie na wszystkie osiem pozycji oznaczają, że przepisano całe wartości. Różnice dotykające tylko wysokich bitów zwykle oznaczają, że jedno pole zastąpiono wartością o zupełnie innej wielkości. Odległość Hamminga (łączna liczba odwróconych bitów) wyraża to samo jedną liczbą.

Jedno uczciwe zastrzeżenie: dane losowe zgadzają się na danym bajcie z prawdopodobieństwem 1/256, więc dwa niezwiązane pliki tego samego rozmiaru i tak zgodzą się na około 0,4% bajtów. Podobieństwo 99,98% przy garstce krótkich bloków różnic to zmiana rzędu poprawki; podobieństwo 0,4% oznacza po prostu, że pliki nie mają ze sobą nic wspólnego.

Typowe błędy

“Cały plik jest czerwony po pierwszej różnicy.” — to efekt przesunięcia opisany wyżej, a nie rzeczywiste uszkodzenie. Uruchom widok z wyrównaniem bloków: jeśli zgłosi jedną wstawkę i dwie długie operacje kopiowania, pliki różnią się dokładnie tym wstawionym fragmentem. “Sumy kontrolne się zgadzają, ale pliki tu się różnią.” — jeśli skróty SHA-256 są takie same, pliki się nie różnią; sprawdź, czy w obu narzędziach otwarto te same pliki. Zgodność CRC-32 natomiast nic nie dowodzi wobec celowej kolizji. “Podobieństwo 0,4%, a zmieniłem tylko jedną rzecz.” — jeśli edycja była wewnątrz skompresowanego lub zaszyfrowanego kontenera (ZIP, zTXt w PNG, zaszyfrowany wolumin), jedna logiczna zmiana przepisuje cały strumień skompresowany.

FAQ

Jaki jest limit rozmiaru? — 200 MB na plik dla różnicy bajtowej, porównywanej w 1-megabajtowych fragmentach. Widok z wyrównaniem bloków wczytuje oba pliki, więc jest ograniczony do 64 MB po każdej stronie.
Czy wykrywa przeniesione fragmenty? — wyrównywacz dopasowuje bloki w kolejności; fragment przeniesiony w inne miejsce pojawi się jako usunięcie i wstawienie tej samej treści, co jest poprawnym, choć nieco topornym opisem.
Czy może wygenerować plik poprawki? — nie, to narzędzie analityczne; raporty CSV i TXT służą do dokumentacji i przeglądu, a nie do stosowania zmian.
Co dzieje się z moimi plikami? — nic: brak serwera, brak zapisu, brak analityki; zamknij kartę, a każdy bajt wejścia zniknie.