Порівняння двійкових файлів

Перетягніть два файли, і ця сторінка порівняє їх побайтово прямо у вашому браузері: кожне зміщення, що відрізняється, hex-різницю з навколишнім контекстом, карту щільності відмінностей і аналіз на рівні бітів, який показує, які саме біти змінилися. Окремий режим з вирівнюванням блоків виявляє вставки й видалення посеред файлу — випадок, який звичайна побайтова різниця не може вирівняти. Результати експортуються в TXT і CSV. Нічого нікуди не завантажується. Щоб редагувати байти замість порівняння, див. hex-редактор; для тексту — інструмент Порівняння тексту.
ФАЙЛ A
Перетягніть перший файл сюди або натисніть, щоб вибрати
До 200 МБ. Залишається на цьому комп'ютері.
ФАЙЛ B
Перетягніть другий файл сюди або натисніть, щоб вибрати
Порівняно з файлом A.
Hex-контекст навколо кожної відмінності:  — сусідні відмінності ближче за 16 байтів показано одним блоком.
Підсумок порівняння з'явиться тут, коли обидва файли буде вибрано й порівняно.
Побайтова різниця вирівнює зміщення N з зміщенням N. Якщо байти було вставлено або видалено посеред одного файлу, усе після цієї точки зсувається, і звичайна різниця показує весь хвіст як відмінний. Цей режим хешує блоки по 1 КБ, зіставляє їх між файлами і повідомляє результат як операції копіювання / вставки / видалення — так, як змінення бачать інструменти дельта-кодування, наприклад xdelta. Доступний, коли обидва файли 64 МБ або менші.
Конфіденційність: обидва файли читаються власним FileReader браузера і порівнюються в цій вкладці — без сервера, без завантаження, без зберігання. Великі файли порівнюються шматками по 1 МБ, тож навіть вхідні дані по 200 МБ ніколи не лежать у пам'яті цілком одразу (якщо ви не запускаєте подання з вирівнюванням блоків, яке завантажує обидва файли під час роботи).

Що таке порівняння двійкових файлів?

Двійкове порівняння вирівнює два файли за байтом 0 і рухається вперед, повідомляючи про кожне зміщення, де байти відрізняються — аналог класичної команди cmp -l у браузері. Інструменти порівняння тексту не можуть цього зробити: вони або спотикаються на недрукованих байтах, або мовчки переінтерпретують файл у якомусь текстовому кодуванні. Двійкове порівняння сприймає обидва файли саме такими, якими вони є, — масивами байтів, що й потрібно для образів прошивки, дампів диска, файлів бази даних, зашифрованих даних чи будь-якого файлу, формат якого вам невідомий.

На три запитання відповідають на трьох різних глибинах. “Вони однакові?” — це питання контрольної суми; інструмент відповідає найшвидше, але лише так чи ні. “Де вони відрізняються?” — це побайтова різниця на цій сторінці: зміщення, значення та те, які біти перевернулися. “Який це вид змін?” — ось що додає подання з вирівнюванням блоків: чи є відмінність редагуванням на місці, вставленим фрагментом чи видаленим фрагментом.

Побайтова різниця і вирівнювання блоків — навіщо два подання?

СитуаціяПобайтова різниця показуєПодання з вирівнюванням блоків показує
Поле перезаписано на місці (той самий розмір файлу) кілька розкиданих зміщень, що відрізняються те саме, плюс «все інше копіюється»
1 КБ вставлено у зміщенні 2000 файлу B усе, починаючи з 2000, «відрізняється» копіювати 0–2000, вставити 1 КБ, скопіювати решту
Блок видалено посеред файлу B усе з цієї точки «відрізняється» копіювати до прогалини, видалити N байтів, скопіювати решту
Файл B — це файл A з іншим заголовком на початку цілі файли «відрізняються» видалити заголовок, потім одна довга копія — тобто сталий зсув

Побайтова різниця завжди правильна — ці байти справді відрізняються в тих зміщеннях. Але інтерпретація зсувається, щойно байти вставлено або видалено, так само як додавання рядка на початку текстового файлу змінює всі наступні номери рядків.

Як читається аналіз на рівні бітів

Для кожного байта, що відрізняється, сторінка обчислює A XOR B і рахує, які позиції бітів встановлені. Ця гістограма напрочуд виразна: відмінності, зосереджені в біті 0 (молодшому біті кожного байта), — це відбиток стеганографії молодшого біта, коли повідомлення ховають, злегка змінюючи молодший біт зразків пікселів або аудіо. Відмінності, розподілені рівномірно по всіх восьми позиціях, означають, що цілі значення переписано. Відмінності, що торкаються лише старших бітів, зазвичай означають, що одне поле замінено значенням зовсім іншої величини. Відстань Геммінга (загальна кількість перевернутих бітів) передає те саме одним числом.

Одне чесне застереження: випадкові дані збігаються в будь-якому окремому байті з ймовірністю 1/256, тож два непов'язані файли однакового розміру все одно збігаються приблизно на 0,4% байтів. Схожість 99,98% з кількома короткими блоками відмінностей — це зміна рівня патча; схожість 0,4% означає, що файли просто не пов'язані.

Типові помилки

“Увесь файл червоний після першої відмінності.” — це ефект зсуву, описаний вище, а не справжнє пошкодження. Запустіть подання з вирівнюванням блоків: якщо воно повідомляє про одну вставку і дві довгі операції копіювання, файли відрізняються саме цим вставленим фрагментом. “Контрольні суми збіглися, але файли тут відрізняються.” — якщо дайджести SHA-256 збігаються, файли не відрізняються; перевірте, що ви відкрили однакові файли в обох інструментах. Збіг CRC-32, своєю чергою, нічого не доводить проти навмисної колізії. “Схожість 0,4%, але я змінив лише одне.” — якщо ваше редагування було всередині стиснутого чи зашифрованого контейнера (ZIP, zTXt у PNG, зашифрований том), одна логічна зміна переписує весь стиснений потік.

Часті запитання (FAQ)

Яке обмеження розміру? — 200 МБ на файл для побайтової різниці, порівнювання відбувається шматками по 1 МБ. Подання з вирівнюванням блоків завантажує обидва файли, тож обмежене 64 МБ з кожного боку.
Чи виявляє воно переміщені фрагменти? — вирівнювач зіставляє блоки за порядком; фрагмент, переміщений в інше місце, з'являється як видалення плюс вставка того самого вмісту, що є правильним, хоч і дещо грубим описом.
Чи може він створити файл патча? — ні, це інструмент аналізу; звіти CSV і TXT призначені для документації й перегляду, а не для застосування змін.
Що відбувається з моїми файлами? — нічого: без сервера, без зберігання, без аналітики; закрийте вкладку — і кожен байт вхідних даних зникає.