![Blog. Just Blog](/images/logo.png)
Алгоритм хеширования Jenkins на Ассемблере
Семейство хеш-функций Jenkins ведет свою историю с 1997 года, когда этот алгоритм был впервые опубликован. Автором является Bob Jenkins, известный специалист в области создания генераторов псевдослучайных чисел и криптографии. Несмотря на кажущуюся простоту, хеш Jenkins обладает высокой скоростью работы и отличным лавинным эффектом. Даже на небольших объемах данных количество коллизий минимальное. Вот вариант этого алгоритма на Ассемблере.Code (Assembler) : Убрать нумерацию
- ;---------------------------------------------
- ; Функция вычисления хеша Jenkins
- ; Copyright (C) ManHunter / PCL
- ; https://www.manhunter.ru
- ;---------------------------------------------
- ; Параметры:
- ; lpData - указатель на строку
- ; dSize - длина строки
- ; На выходе:
- ; EAX = полученный хеш
- ;---------------------------------------------
- proc Jenkins lpData:DWORD, dSize:DWORD
- push ebx ecx esi
- ; Инициализация
- xor ebx,ebx
- ; Длина строки
- mov ecx,[dSize]
- or ecx,ecx
- je .loc_ret
- mov esi,[lpData]
- @@:
- lodsb
- movzx eax,al
- ; hash += key[i];
- add ebx,eax
- ; hash += hash << 10;
- mov eax,ebx
- shl eax,10
- add ebx,eax
- ; hash ^= hash >> 6;
- mov eax,ebx
- shr eax,6
- xor ebx,eax
- ; i++
- dec ecx
- jnz @b
- .loc_ret:
- ; hash += hash << 3;
- mov eax,ebx
- shl eax,3
- add ebx,eax
- ; hash ^= hash >> 11;
- mov eax,ebx
- shr eax,11
- xor ebx,eax
- ; hash += hash << 15;
- mov eax,ebx
- shl eax,15
- add eax,ebx
- pop esi ecx ebx
- ret
- endp
В приложении пример программы с исходным текстом, которая считает хеш Jenkins для введенной строки.
Просмотров: 215 | Комментариев: 0
![](/images/dot.gif)
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет
![](/images/dot.gif)
Добавить комментарий
Заполните форму для добавления комментария
![](/images/dot.gif)