Хэш djb2 онлайн — калькулятор и разбор алгоритма | lavarden.ru
Войти

Хэш 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.

hash = 5381 для каждого байта b: hash = hash × 33 + b следующий байт хэш (32 бита)
Одна строчка кода на весь алгоритм — и тем не менее хорошее распределение на практике

Характеристики

ПараметрЗначение
Длина хэша32 бита (8 hex-символов)
Операция на байтhash = hash × 33 + byte
Начальное значение5381
ТипНекриптографический хэш для хэш-таблиц
АвторДэниел Дж. Бернстайн, начало 1990-х

Где применяется

Криптостойкость

⚠️

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

Пример

СтрокаHello, world!
djb2e18796ae
Пустая строка00001505