Хэш Jenkins One-at-a-Time онлайн — калькулятор и разбор алгоритма | lavarden.ru
Войти

Хэш Jenkins One-at-a-Time онлайн

Хэш Боба Дженкинса, обрабатывающий байты по одному — простая и надёжная классика 1997 года. Считается прямо в браузере — текст никуда не отправляется.

Вычислить Jenkins One-at-a-Time

Результат пересчитывается сам, пока вы печатаете. В режиме «По строкам» пустые строки тоже хэшируются — результат всегда совпадает по числу строк со входом. Нужна другая функция — на полной странице калькулятора их 32.

История Jenkins One-at-a-Time

Придумал Боб Дженкинс — автор целого семейства известных некриптографических хэш-функций (lookup2, lookup3, SpookyHash) — и описал в статье «A Hash Function for Hash Table Lookup» в журнале Dr. Dobb's Journal в 1997 году. Название «one-at-a-time» указывает на то, как алгоритм обрабатывает вход: строго по одному байту за раз, без разбиения на слова или блоки, — что делает его удобным для потоковой обработки данных произвольной длины без выравнивания.

Как устроен алгоритм

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

hash = 0 для каждого байта b: hash += b; hash += hash<<10; hash ^= hash>>6 финализация (1 раз, после всех байт): hash += hash<<3; hash ^= hash>>11; hash += hash<<15
Сдвиги и XOR вместо умножения — три операции на байт, плюс финальное перемешивание

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

ПараметрЗначение
Длина хэша32 бита (8 hex-символов)
Операция на байтadd + два сдвига с XOR
Финализацияещё 3 операции после всех байт
ТипНекриптографический хэш для хэш-таблиц
Опубликован1997, Боб Дженкинс

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

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

⚠️

Некриптографический хэш — несмотря на хорошее статистическое распределение, для защиты от намеренной подделки не подходит.

Пример

СтрокаHello, world!
Jenkins OATf83bcf75
Пустая строка00000000