MurmurHash3_x86_32() ожидает параметр seed. Какую ценность я должен использовать и что он делает?
Что такое параметр семян MurmurHash3?
Ответ 1
Параметр seed - это средство для рандомизации хэш-функции. Вы должны указать одно и то же начальное значение для всех вызовов хеширующей функции в том же приложении функции хэширования. Однако каждый вызов вашего приложения (при условии, что он создает новую хеш-таблицу) может использовать другое семя, например, случайное значение.
Почему это предусмотрено?
Одна из причин заключается в том, что злоумышленники могут использовать свойства хэш-функции для создания атаки на отказ в обслуживании. Они могли бы сделать это, предоставив строки своей хеш-функции, чтобы весь хэш с тем же значением разрушал производительность вашей хеш-таблицы. Но если вы используете другое семя для каждого запуска вашей программы, набор строк, на которые злоумышленники должны использовать изменения.
Смотрите: Эффективные DoS на платформе веб-приложений
Также есть тег Twitter для #hashDoS
Ответ 2
В данной реализации seed
используется при построении вектора инициализации. Это произвольное значение, выбирая разные значения для разных данных, уменьшит скорость столкновения. Но обратите внимание, что тогда вы должны знать пару seed
- data
.
Ответ 3
Значение с именем seed
здесь означает соль. Предоставьте любые случайные, но частные (к вам приложения) данные, поэтому хеш-функция даст разные результаты для одних и тех же данных. Эта функция используется, например, для сбора данных ваших данных для определения модификации исходных данных третьими лицами. Они вряд ли смогут воспроизвести действительную хеш-ценность, пока не узнают соль, которую вы использовали.
Соль (или семя) также используется для предотвращения хеш-коллизий для разных данных. Например, ваши блоки данных A и B могут создавать один и тот же хеш: h (A) == h (B). Но вы можете избежать этого противоречивого условия, если предоставить какие-то дополнительные данные. Столкновения довольно редки, но иногда соль - это способ избежать их для конкретного набора данных.