Есть ли учебник по хеш-функциям? - PullRequest
27 голосов
/ 27 сентября 2010

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

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

Ответы [ 3 ]

16 голосов
/ 06 декабря 2013

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

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

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

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

3 голосов
/ 27 сентября 2010

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

В Википедии есть базовая информация о Хеш-таблицах и Хеш-функциях .

EDIT

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

1 голос
/ 13 сентября 2017

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

Что делает хорошую функцию хеширования

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...