Хэш 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 со сдвинутой копией и затем обнуляют через маску. Этот шаг предотвращает переполнение старших бит мусором на длинных строках, что было слабым местом более простых сдвиговых хэшей.
Характеристики
| Параметр | Значение |
|---|---|
| Длина хэша | 32 бита (8 hex-символов) |
| Операция на байт | сдвиг на 4 бита + сложение, с чисткой старших бит |
| Тип | Некриптографический хэш для таблиц символов |
| Автор | Питер Дж. Вайнбергер, Bell Labs |
| Где закреплён | Спецификация формата ELF |
Где применяется
- Секция
.hashв исполняемых файлах и библиотеках формата ELF (Linux и другие Unix-системы) - Таблицы символов в компиляторах, унаследовавших традицию Unix-инструментов
Криптостойкость
Некриптографический хэш, спроектированный для внутренних таблиц символов компилятора и линковщика — не для защиты от подделки.