Есть массив данных, для которого получена CRC-контрольная сумма. Можно ли после изменения фрагмента массива обновить контрольную сумму без полного ее перерасчета. Ликбез по CRC вроде бы как наводит на мысль, что можно. Соображения такие: согласно Wiki (
http://en.wikipedia.org/wiki/Generator_polynomial), если отождествлять бинарные последовательности с полиномами из
, то полином
, отвечающий контрольной сумме размера
бит, для данных, представленных полиномом
, должен находиться из условия:
где
- некоторый фиксированный полином.
Как я понимаю, пользуясь тем, что полиномы с операциями сложения и умножения по модулю
образуют кольцо, можно записать:
Тогда для полинома
фрагментарно измененного массива полином
его контрольной суммы можно представить как
где
.
Откуда вытекает, что для расчета CRC-контрольной суммы измененного массива достаточно:
1) выполнить побитовое вычитание фрагментов массива (соответствует нахождению
);
2) для полученной разности выполнить побитовый сдвиг влево на
-разрядов (соответствует нахождению
);
3) полученный результат вычесть побитово из прежней контрольной суммы;
4) рассчитать остаток от деления на
. Он и будет искомой обновленной контрольной суммой измененного массива.
Так ли это?