Рассмотрим наиболее распространенные методы задания хеш-функции.
Задание:
1. Хешировать свой пароль на сайте: http://www. hashemall. com/
2. Использовать взломщик паролей на сайте: https://crackstation. net/
3. Разобрать понятия имитовставка и аппаратное хэширование паролей.
Метод деления. Исходными данными являются - некоторый целый ключ key и размер таблицы m. Результатом данной функции является остаток от деления этого ключа на размер таблицы. Общий вид функции:
int h(int key, int m)
return key m; // Значения
Для m 10 хеш-функция возвращает младшую цифру ключа.
Аддитивный метод, в котором ключом является символьная строка. В хеш-функции строка преобразуется в целое суммированием всех символов и возвращается остаток от деления на m (обычно размер таблицы m 256).
int h(char key, int m)
int s 0;
while(key)
s key;
return s m;
Коллизии возникают в строках, состоящих из одинакового набора символов, например, abc и cab.
Метод середины квадрата, в котором ключ возводится в квадрат (умножается сам на себя) и в качестве индекса используются несколько средних цифр полученного значения.
Например, ключом является целое 32-битное число, а хеш-функция возвращает средние 10 бит его квадрата:
int h(int key)
key key;
key " 11; // Отбрасываем 11 младших бит
return key 1024; // Возвращаем 10 младших бит
В мультипликативном методе дополнительно используется случайное действительное число r из интервала 0,1), тогда дробная часть произведения rkey будет находиться в интервале 0,1. Если это произведение умножить на размер таблицы m, то целая часть полученного произведения даст значение в диапазоне от 0 до m - 1.
int h(int key, int m)
Страницы: << < 1 | 2 | 3 | 4 > >>