Лучший способ * аннулировать * контрольную сумму

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

1 ответ

Решение

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

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

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

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

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