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

Хэш ELF / PJW hash онлайн

Хэш из формата ELF и компиляторов Unix — с характерной чисткой старших бит через маску. Считается прямо в браузере — текст никуда не отправляется.

Вычислить ELF / PJW hash

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

История ELF / PJW hash

Алгоритм придумал Питер Дж. Вайнбергер (Peter J. Weinberger) из Bell Labs для хэш-таблиц символов в ранних компиляторах Unix — отсюда второе имя, «PJW hash». Позже тот же алгоритм включили в спецификацию формата исполняемых файлов ELF (Executable and Linkable Format) для его собственной хэш-таблицы символов — и под именем «ELF hash» он известен, пожалуй, даже больше, чем под фамилией автора.

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

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

На каждый байт выполняется сдвиг аккумулятора на 4 бита влево с прибавлением байта, а затем — характерная особенность алгоритма — проверка старших 4 бит: если после сдвига они не нулевые, их дополнительно «сбрасывают» через XOR со сдвинутой копией и затем обнуляют через маску. Этот шаг предотвращает переполнение старших бит мусором на длинных строках, что было слабым местом более простых сдвиговых хэшей.

hash = 0 для каждого байта b: hash = (hash << 4) + b если старшие 4 бита ≠ 0: hash ^= (старшие биты >> 24); обнулить их в hash
Дополнительная чистка старших бит — защита от «мусора», накапливающегося на длинных строках

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

ПараметрЗначение
Длина хэша32 бита (8 hex-символов)
Операция на байтсдвиг на 4 бита + сложение, с чисткой старших бит
ТипНекриптографический хэш для таблиц символов
АвторПитер Дж. Вайнбергер, Bell Labs
Где закреплёнСпецификация формата ELF

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

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

⚠️

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

Пример

СтрокаHello, world!
ELF / PJW0925c3c1
Пустая строка00000000