Определить байт смещения ошибки по CRC16 - PullRequest
0 голосов
/ 17 марта 2011

Можно ли определить байт или байты, которые изменились из расчета CRC16?

Например, скажем, я получаю файл конфигурации, который составляет 780 байтов, который включает CRC16 как двухбайтовое значение в конце (поэтому CRC16 рассчитывается на основе первых 778 байтов). Когда я вычисляю CRC16 для содержимого файла (778 байт, которые не включают в себя CRC16 в конце) и он отличается, могу ли я определить смещение в байтах, в котором произошла ошибка?

Ответы [ 2 ]

2 голосов
/ 17 марта 2011

Используя только два вычисления CRC16, нет.

CRC16 - это просто контрольная сумма: она может сказать вам, что есть разница, но не где.

1 голос
/ 17 марта 2011

Короткий ответ - НЕТ, вы не можете.

Чтобы понять, почему вы должны понимать, как вычисляется CRC и что математически это называется операцией хеширования.Это означает, что выходные данные не могут быть надежно восстановлены из сгенерированного хеш-кода (в данном случае CRC).

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

...