Helionix

CRC или SHA-256: что выбрать для сравнения архивов

Чем CRC-32 отличается от SHA-256, когда достаточно быстрой контрольной суммы, что именно хешировать и как построить надёжный манифест архива.

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

В инструменте сравнения архивов сначала можно использовать путь, размер и доступный CRC, а глубокий SHA-256 рассчитывать для критичных или спорных записей.

Краткое сравнение

СвойствоCRC-32SHA-256
НазначениеОбнаружение случайных ошибокКриптографическое хеширование
Скорость и размер значенияОчень быстро, 32 битаТребовательнее, 256 бит
Наличие в архивеЧасто хранится в ZIP и GZIPОбычно нужно рассчитывать отдельно
Устойчивость к намеренной подменеНедостаточнаСущественно выше при корректном применении

Как использовать проверки вместе

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

Этот порядок реализует сравнение файлов внутри архива без лишнего хеширования заведомо разных объектов.

Почему CRC удобен

Контрольное значение уже находится в служебных данных многих ZIP, поэтому сравнение каталогов выполняется быстро. Оно хорошо замечает обрыв передачи, случайное изменение байта и обычное редактирование. Для личных резервных копий сочетание пути, исходного размера и CRC часто является практичным первым уровнем.

Почему CRC не является доказательством безопасности

У 32-битного значения ограниченное пространство, и возможны коллизии. Кроме того, CRC не проектировался для противодействия человеку, намеренно формирующему данные. Корректный CRC не означает, что файл безопасен, подписан или получен от доверенного источника. Злоумышленник может создать новый вредоносный архив с внутренне согласованными контрольными полями.

Что именно хешировать SHA-256

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

Ограничения SHA-256 в практике

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

Как устроить манифест большого архива

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

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

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

Нужно ли считать SHA-256 для каждого файла?

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

Если SHA-256 совпал, файлы одинаковы?

В практическом смысле это очень сильное подтверждение побайтового равенства проверенных данных. Но оно не говорит, безопасны ли эти данные и доверен ли их автор.

Можно ли сравнивать только внешний SHA-256 архива?

Да, если нужна точная копия конкретного релизного файла. Для проверки содержимого после переупаковки внешний хеш непригоден.

Итог

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

Сравнить архивы по CRC и содержимому →