Helionix

Почему одинаковые архивы имеют разный размер и хеш

Метод и уровень сжатия, порядок, даты, extra fields, solid-блоки и шифрование: почему контейнеры различаются при одинаковых внутренних файлах.

Два архива могут раскрывать совершенно одинаковые файлы, но иметь разный объём и разные SHA-256 контейнеров. Это нормальное свойство форматов упаковки: архив включает не только данные, но и заголовки, порядок записей, алгоритмы сжатия, даты, комментарии и другие служебные сведения.

Чтобы выяснить, различается ли именно содержимое, используйте инструмент сравнения архивов Helionix. Он сопоставляет внутренние записи, а не ограничивается байтовым хешем всего ZIP, 7Z или TAR.GZ.

Основные причины разницы

  • другой метод или уровень сжатия;
  • изменённый порядок файлов;
  • новые временные метки и часовой пояс;
  • другая версия архиватора или его библиотек;
  • комментарии, дополнительные поля и атрибуты;
  • solid-режим, размер словаря и разбиение на блоки;
  • случайные параметры шифрования;
  • явные записи пустых папок или иная кодировка имён.

Хеш контейнера и хеш содержимого

ПроверкаЧто подтверждаетКогда применять
SHA-256 всего архиваПобайтовое совпадение конкретного контейнераКонтроль скачанного релизного файла
SHA-256 каждой записиСовпадение декодированных файлов по путямПроверка переупаковки и конвертации
Хеш манифестаСовпадение нормализованного списка путей и хешейПовторяемая проверка больших наборов

Как определить, одинаковы ли данные

  1. Откройте сравнение содержимого архивов.
  2. Сверьте нормализованный список относительных путей.
  3. Проверьте число файлов и суммарный исходный размер.
  4. Сопоставьте исходный размер и CRC каждой записи.
  5. Для точного подтверждения рассчитайте SHA-256 после декодирования.
  6. Выведите изменения метаданных отдельным списком.

Влияние уровня и метода сжатия

Один ZIP может хранить файл без сжатия, другой — использовать Deflate. Даже при одинаковом алгоритме разные уровни, реализации и стратегии дают разные потоки. В 7Z параметры LZMA2 и solid-группировка дополнительно связывают результат с соседними файлами. Поэтому сжатый размер не является устойчивым идентификатором исходных данных.

Порядок и временные метки

Если упаковщик обошёл папку в другой последовательности, центральный каталог и расположение потоков изменятся. Новая дата модификации меняет заголовки, даже если байты документа остались прежними. В GZIP заголовок может содержать MTIME; иное время достаточно для другого хеша всего файла. Логический режим сравнения позволяет игнорировать такие свойства.

Шифрование

При корректном шифровании одинаковое открытое содержимое не должно каждый раз давать одинаковый шифротекст. Поэтому два защищённых архива, созданных заново с тем же паролем, закономерно различаются. Подтвердить равенство можно только после авторизованного расшифрования и хеширования данных.

Когда разные хеши всё-таки тревожны

Если издатель обещает конкретный SHA-256 загружаемого архива, несовпадение означает, что у вас другой контейнер: возможно, другая версия, неполная загрузка или подмена. Не игнорируйте это только потому, что список файлов кажется знакомым. Сверьте источник и повторите получение по доверенному каналу.

Как добиться детерминированной упаковки

Для побитово повторяемого результата зафиксируйте версию архиватора, формат, уровень сжатия, порядок записей, кодировку, даты и набор дополнительных полей. Исключите абсолютные пути и нестабильные комментарии сборки. Время файлов часто приводят к заранее выбранному значению, если это допускает процесс. После создания сравнивают внешний SHA-256, а при несовпадении переходят к внутреннему манифесту, чтобы понять слой расхождения.

Детерминированность полезна для цепочки поставки, но не нужна для каждого личного ZIP. Если цель — убедиться в сохранности документов после переупаковки, достаточно логического сравнения с сильными хешами содержимого.

Частые вопросы

Можно ли получить два побитово одинаковых архива?

Да, при детерминированной сборке: фиксированных датах, порядке, параметрах и версии инструментов. Это отдельная задача воспроизводимости.

Почему архив стал больше после повторной упаковки?

Изменился формат, метод, уровень, словарь или состав метаданных. Сначала проверьте внутренние данные, затем оптимизируйте упаковку.

Достаточно ли одинакового суммарного исходного размера?

Нет. Разные наборы могут иметь одинаковую сумму. Нужны пути и хеши отдельных файлов.

Итог

Разный размер и хеш контейнера не обязательно означают разные документы. Для логического сравнения стройте манифест из нормализованных путей, размеров и хешей содержимого; метаданные и параметры упаковки оценивайте отдельно.

Проверить содержимое разных архивов →