Лучший способ * аннулировать * контрольную сумму - PullRequest
0 голосов
/ 13 июня 2011

Допустим, у меня есть буфер размером 4 КБ, содержащий в начале контрольную сумму. Этот буфер содержит метаданные, которые ссылаются на другие буферы. Нотабене буферы - это файлы с отображением в памяти. Я заметил, что один из буферов недействителен (либо контрольная сумма не работает, либо контрольная сумма в порядке, но она ссылается на неверный буфер). Теперь я хочу аннулировать буфер, который ссылается на другой неверный буфер. Какой математически лучший способ аннулировать буфер? Повредить саму контрольную сумму, чтобы она не соответствовала данным ИЛИ не повредить данные, чтобы она не совпала с контрольной суммой. Или есть третий, лучший способ? Для чего это стоит, это вариант CRC32.

1 Ответ

1 голос
/ 13 июня 2011

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

Если ссылка CRC32 не была действительной, самой безопасной ставкой было бы рассчитать CRC , а вычесть единицу. Прежде всего, вам нужно знать правильный CRC, поскольку случайный выбор CRC, хотя вряд ли будет правильным, все еще имеет вероятность того, что он будет правым примерно на один из четырех миллиардов.

Изменение CRC кажется наиболее безопасным вариантом здесь. Если не выполнять математический анализ алгоритма CRC32, невозможно гарантировать, что конкретное изменение данных не сгенерирует такое же значение CRC (поскольку большое количество наборов данных может отображаться на одно и то же CRC).

Однако несомненно, что специфический набор данных всегда будет генерировать один и тот же CRC, поэтому, изменив CRC на что-то другое, вы можете быть уверены, что блок теперь будет недействительным.

...