CRC32 String Сравнение двух файлов, которые могут быть идентичными, но не уверены

У меня есть вопрос относительно CRC (проверка избыточности контрольной суммы).

Если в файле произойдет " небольшое " изменение, например, только изменение одного символа, повлияет ли это на результат CRC32? Или есть вероятность, что два разных файла имеют одинаковый результат CRC32?

У меня есть два файла, которые я не знаю, если они полностью идентичны, но они имеют тот же результат CRC32.

Ваше мнение приветствуется.

Спасибо

1 ответ

Решение

Да, вам гарантировано, что если изменяется только один байт, то CRC изменяется. Фактически, если четыре байта в строке изменены, или любые 32 смежных бита изменены (т.е. первый и последний из 32 битов перевернуты, а любое подмножество между ними перевернуто), то вы гарантированно измените CRC,

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

Интересно, что для пакета на один бит длиннее всего один 33-битный шаблон, который не изменит CRC. Таким образом, почти все 33-битные смежные ошибки также будут обнаружены.

Если вы перевернули больше битов или в более рассредоточенных местах, вы можете вернуться к исходному CRC. Хотя с малой вероятностью, если сальто не были тщательно обработаны. Вы можете посмотреть на мой spoof.c Программа, в которой указан набор местоположений, которые нужно перевернуть в сообщении, и требуемый CRC скажет вам, какое из этих мест нужно перевернуть, чтобы получить желаемый CRC.

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

Другие вопросы по тегам