Имя, размер и CRC образуют удобный многоступенчатый фильтр для сравнения архивов. Полный путь помогает найти соответствующую запись, исходный размер быстро исключает явные различия, а CRC обнаруживает большинство случайных изменений. Но ни один признак по отдельности не даёт абсолютной гарантии.
В инструменте «Сравнить архивы» эти свойства можно читать вместе. Такой подход намного точнее сравнения общего размера ZIP или одной даты изменения.
Что показывает каждый критерий
| Критерий | Сильная сторона | Слабая сторона |
|---|---|---|
| Полный путь | Связывает логически один объект в двух деревьях | Не замечает переименование и не подтверждает данные |
| Исходный размер | Очень быстро исключает разные объёмы | Разные файлы нередко имеют одинаковую длину |
| CRC-32 | Хорошо ловит случайную порчу и обычные правки | Возможны коллизии; алгоритм не криптографический |
| SHA-256 содержимого | Даёт значительно более сильную идентификацию | Требует декодирования и чтения всей записи |
Практическая последовательность
- Нормализуйте путь, но сохраните исходное имя для отчёта.
- Если пути не совпали, поместите записи в кандидаты на добавление и удаление.
- Если исходные размеры различны, отметьте файл изменённым.
- Если размеры совпали, сравните доступные CRC.
- Для важных совпадений рассчитайте SHA-256 декодированных данных.
- Отдельно сравните даты, права и методы упаковки.
Запустить эту последовательность можно через сравнение файлов внутри архивов. Отчёт должен указывать, каким именно критерием подтверждено состояние.
Исходный и сжатый размер — не одно и то же
Для содержимого важен размер после декодирования. Сжатый объём зависит от алгоритма, уровня, словаря, solid-режима и соседних данных. Одинаковый документ, повторно упакованный другим приложением, может занимать внутри контейнера другое число байтов. Поэтому сжатый размер полезен для анализа упаковки, но слаб как доказательство изменения файла.
Что означает совпадение CRC
В ZIP обычно используется CRC-32, рассчитанный по исходным данным записи. Если размеры и CRC совпали, вероятность случайного различия невелика, поэтому для бытового сравнения этого часто достаточно. Однако CRC проектировался для выявления ошибок передачи, а не для защиты от намеренной подмены. В задачах безопасности, публикации релизов и юридически значимых наборах добавляйте SHA-256.
Имя и путь: тонкости нормализации
Нельзя безусловно переводить все имена в нижний регистр: это уничтожит различие, важное для Linux. Лучше показать строгий результат и отдельное предупреждение о коллизии регистра. Аналогично следует осторожно обращаться с Unicode и кодировками старых ZIP. Визуальное совпадение строки ещё не означает идентичные байты имени.
Когда признаки недоступны
У зашифрованной записи CRC может быть скрыт или недостаточен без успешного декодирования. Повреждённый каталог способен содержать неверные значения. В solid-архиве для расчёта хеша одного файла иногда требуется обработать общий блок. Помечайте такие элементы как непроверенные и не приравнивайте их автоматически к совпавшим.
Как представить уверенность в отчёте
Вместо одного зелёного значка полезно показывать уровень подтверждения. «Совпало по пути» означает только структурную связь; «совпало по размеру и CRC» — сильное свидетельство отсутствия случайной правки; «совпало по SHA-256 содержимого» — глубокую проверку. Если данные не читались из-за пароля или ошибки, состояние должно называться «не проверено», а не «совпало». Такая градация позволяет ускорить массовый анализ и одновременно не переоценить быстрый результат.
Для экспорта добавьте в строку алгоритм, значение, исходный размер и причину, по которой более глубокий уровень не выполнялся.
Частые вопросы
Достаточно ли совпадения имени и размера?
Нет. Текст можно изменить, сохранив ту же длину. Добавьте CRC, а для критичных материалов — SHA-256 содержимого.
Можно ли сравнить CRC всего архива?
Единое CRC контейнера не заменяет проверку каждой записи. Любое изменение метаданных поменяет значение всего файла, но не укажет, какой внутренний элемент отличается.
Почему CRC отсутствует?
Это зависит от формата, метода, шифрования и состояния заголовков. Инструмент должен использовать доступные эквивалентные проверки или сообщить, что содержимое не подтверждено.
Итог
Используйте имя как ключ сопоставления, исходный размер как быстрый фильтр, CRC как проверку случайных изменений и SHA-256 как усиление для важных данных. Сжатый размер и даты оставляйте в слое метаданных.
