Хэш djb2 онлайн
Магическая константа 33 и минимум кода — хэш Дэна Бернстайна, разошедшийся по тысячам учебников. Считается прямо в браузере — текст никуда не отправляется.
Вычислить djb2
Результат пересчитывается сам, пока вы печатаете. В режиме «По строкам» пустые строки тоже хэшируются — результат всегда совпадает по числу строк со входом. Нужна другая функция — на полной странице калькулятора их 32.
История djb2
djb2 назван по инициалам своего автора — Дэниела Джулиуса Бернстайна (Daniel J. Bernstein), известного криптографа и программиста (автор qmail, djbdns, кривой Curve25519 и многого другого). Сам алгоритм он никогда официально не публиковал в виде статьи — просто выложил в начале 1990-х в конференции Usenet comp.lang.c как пример простого и на удивление хорошо работающего хэша. С тех пор djb2 разошёлся по тысячам учебников и курсов по программированию как классический «первый хэш», который пишут студенты.
Магическая константа 33 не имеет строгого теоретического обоснования — Бернстайн подобрал её экспериментально, перебором по качеству распределения на реальных наборах строк. Есть популярная гипотеза, почему именно 33 (а не, скажем, 31, как в других известных хэшах): умножение на 33 равно (h << 5) + h — то есть сдвигу и сложению, что на процессорах без быстрого умножения (актуально для железа тех лет) считалось заметно быстрее.
Как устроен алгоритм
Проще, чем djb2, придумать сложно: аккумулятор стартует со значения 5381 (тоже подобрано экспериментально), и для каждого байта строки выполняется одна операция — hash = hash × 33 + byte.
Характеристики
| Параметр | Значение |
|---|---|
| Длина хэша | 32 бита (8 hex-символов) |
| Операция на байт | hash = hash × 33 + byte |
| Начальное значение | 5381 |
| Тип | Некриптографический хэш для хэш-таблиц |
| Автор | Дэниел Дж. Бернстайн, начало 1990-х |
Где применяется
- Учебные примеры и курсы по структурам данных — де-факто эталонный «простой хэш»
- Небольшие проекты и встраиваемые системы, где не нужна сложная хэш-функция
Криптостойкость
djb2 никогда не задумывался как криптографический алгоритм и легко поддаётся целенаправленному подбору коллизий — использовать для защиты от подделки нельзя, только для распределения ключей по хэш-таблице в доверенных условиях.