Почему мод премьер использовался для Adler32?
С собственного сайта Адлера http://zlib.net/zlib_tech.html
Однако, Адлер-32
был построен, чтобы минимизировать
способы сделать небольшие изменения в данных
этот результат в том же контрольном значении,
благодаря использованию сумм значительно
больше, чем байты и с помощью
простое (65521) для модуля. Это
в этой области, что некоторый анализ
заслужил, но это еще не было
сделано.
Основная причина Адлера-32 состоит в том, что
Конечно, скорость в программном обеспечении
Реализации.
Альтернативой Adler-32 является Fletcher-32, который заменяет модуль 65521 на 65535. Этот документ показывает, что Fletcher-32 лучше для каналов с низкими скоростями случайных битовых ошибок.
Он был использован, потому что простые числа имеют тенденцию иметь лучшие свойства смешивания. Насколько это хорошо, еще предстоит обсудить.
Другие объяснения
Кто-то еще в этой теме приводит несколько убедительные аргументы в пользу того, что модуль простого числа лучше обнаруживать смена битов. Однако, это, скорее всего, , а не , потому что обмен битами происходит крайне редко. Две наиболее распространенные ошибки:
- Случайные перевороты (1 <-> 0) встречаются везде.
- Сдвиг битов (1 2 3 4 5 -> 2 3 4 5 или 1 1 2 3 4 5), распространенный в сети
Большая часть замены битов вызвана случайными переворотами, которые выглядели как обмен битами.
Коды исправления ошибок на самом деле предназначены для того, чтобы выдерживать n-битные отклонения. С сайта Адлера:
Правильно построенный CRC-n имеет
Хорошее свойство, которое меньше, чем n бит
ошибка всегда обнаруживается Это
не всегда верно для Адлера-32 - может
обнаружить все одно- или двухбайтовые ошибки, но
может пропустить некоторые трехбайтовые ошибки.
Эффективность использования простого модуля
Я сделал длинную рецензию по существу на тот же вопрос. Почему по простому модулю?
http://www.codexon.com/posts/hash-functions-the-modulo-prime-myth
Краткий ответ
Мы знаем гораздо меньше о простых числах, чем составные. Поэтому такие люди, как Кнут, начали их использовать.
Несмотря на то, что простые числа имеют меньшую связь с большей частью данных, которые мы хэшируем, увеличение размера таблицы / по модулю также уменьшает вероятность коллизии (иногда больше, чем какая-либо выгода от округления до ближайшего простого числа).
Вот график коллизий в каждой группе с 10 миллионами криптографически случайных целых чисел, сравнивающих мод 65521 против 65535.