Подтвердить что ты не робот

Есть ли нежная хэш-функция?

Смущающе, выбор хэш-функции (скажем, для хеширующих строк или наборов целых чисел и т.д.) по-прежнему магия для меня: возьмите здесь несколько простых чисел, магические константы там, немного сдвиньте бит, по модулю что-то и сделайте,

Есть ли хороший, нежный и доступный учебник о создании хеш-функций?

4b9b3361

Ответ 1

Любопытно, как трудно найти основное объяснение хэш-алгоритмов. Может быть, тема настолько сложная, что нелегко сделать основной учебник. Я искал один сам и столкнулся с той же проблемой.

Но вы можете попробовать эту страницу. Что круто, так это то, что после того, как вы прочитаете страницу, внизу появится текстовое поле. Если вы добавите текст в это поле и отправьте форму, результатом будет пошаговый список того, как он хэширует входной текст.

http://www.metamorphosite.com/one-way-hash-encryption-sha1-data-software

Удачи. Если вы найдете что-нибудь лучше, было бы очень полезно, если бы вы разместили его здесь.

Ответ 2

Вы можете найти достойный, простой хэш-учебник по Hash Table Tutorial (также обсуждает хеш-функции). Обратите внимание: если вы выполняете поиск в Интернете, вы можете найти много хорошей информации.

Википедия имеет некоторую базовую информацию о Hash Tables и Хеш Функции.

ИЗМЕНИТЬ

Ранее был задан аналогичный вопрос: Какую функцию Hash я должен выбрать. Вопрос и ответы превосходны.

Ответ 3

Я нашел эту ссылку немного полезной. Это дает базовый обзор, но не позволяет полностью понять такие вещи, как, например, почему, смена бит и т.д.

http://www.i-programmer.info/babbages-bag/479-hashing.html

Из этой ссылки выделите какой-нибудь раздел, в котором дается обзор

Что делает хорошую хэш-функцию Большинство хороших функций хеширования работают, вычисляя остаток после деления на размер таблицы N.

Это всегда дает значение между 0 и N-1, поэтому оно подходит, но если N - простое число, то оно также отлично подходит для рассеяния данных вокруг таблицы. Конечно, если у вас есть текстовое значение, которое вы хотите использовать, вы должны сначала преобразовать его в подходящее числовое значение, а простая схема, подобная той, что приведена в примере, не будет выполнена.

Вам нужно создать другое числовое значение для каждого возможного текстового значения, и сложение кодов ASCII первых двух букв явно не работает. Лучшим способом является взвешивание каждого из кодов ASCII положением буквы путем умножения на 1 для первого символа, 10 для второго, 100 для третьего и т.д., Прежде чем добавлять их для получения одного значения.

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