Хэш 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), дополнительно «встряхивающий» результат для лучшей лавинности.
Характеристики
| Параметр | Значение |
|---|---|
| Длина хэша | 32 бита (8 hex-символов) |
| Операция на байт | add + два сдвига с XOR |
| Финализация | ещё 3 операции после всех байт |
| Тип | Некриптографический хэш для хэш-таблиц |
| Опубликован | 1997, Боб Дженкинс |
Где применяется
- Хэш-таблицы в языковых рантаймах (исторически, например, в Perl)
- Сетевые и встраиваемые системы, где нужна потоковая обработка байт без выравнивания
Криптостойкость
Некриптографический хэш — несмотря на хорошее статистическое распределение, для защиты от намеренной подделки не подходит.