Blog. Just Blog

Расчет Fletcher's Checksum на Ассемблере

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Алгоритм Fletcher's Checksum был назван в честь его автора - Джона Флетчера (John Fletcher), который разрабатывал проекты для систем дальней связи, тяжелой промышленности, спутниковой навигации и даже NASA. Ему потребовался максимально быстрый и компактный алгоритм для контроля целостности передаваемых данных. Для обработки больших объемов данных Fletcher's Checksum не подходит, так как велика вероятность коллизий (количество возможных значений контрольной суммы всего 65535). Этот алгоритм наиболее эффективен для обнаружения погрешности в несколько бит, например, искажение пакета данных в случае помех при передаче по линии связи. Дальнейшее развитие алгоритма Fletcher's Checksum привело к появлению алгоритма Adler-32, о котором я писал раньше.
  1. ;-----------------------------------------------------------------------
  2. ; Функция вычисления контрольной суммы Флетчера
  3. ; by ManHunter / PCL
  4. ; http://www.manhunter.ru
  5. ;-----------------------------------------------------------------------
  6. ; Параметры:
  7. ;       lpData - указатель на строку
  8. ;       dSize  - длина строки
  9. ; На выходе:
  10. ;       AX = полученный хеш
  11. ;-----------------------------------------------------------------------
  12. proc    fletcher lpData:DWORD, dSize:DWORD
  13.         push    ebx ecx esi
  14.  
  15.         ; Инициализация
  16.         xor     ebx,ebx
  17.  
  18.         ; Длина строки
  19.         mov     ecx,[dSize]
  20.         or      ecx,ecx
  21.         jz      .loc_ret
  22.  
  23.         ; Указатель на начало строки
  24.         mov     esi,[lpData]
  25.  
  26.         ; Хеширование
  27. .loc_checksum:
  28.         lodsb
  29.         add     bl,al
  30.         add     bh,bl
  31.         loop    .loc_checksum
  32.  
  33. .loc_ret:
  34.         movzx   eax,bx
  35.  
  36.         pop     esi ecx ebx
  37.         ret
  38. endp
Параметры вызова: lpData - указатель на данные, для которых надо подсчитать контрольную сумму, dSize - размер данных. 16-битное значение контрольной суммы возвращается в регистре EAX. Алгоритм легко преобразуется в вариант Fletcher-32 и Fletcher-64, разница только в используемых регистрах и размере блоков, используемых для цикла хеширования.

В приложении пример программы с исходным текстом, в которой подсчитывается контрольная сумма введенной строки по алгоритму Fletcher's Checksum.

Пример программы с исходным текстом (FASM)Пример программы с исходным текстом (FASM)

Fletchers.Checksum.Demo.zip (2,476 bytes)


Поделиться ссылкой ВКонтакте
Просмотров: 2437 | Комментариев: 0

Метки: Assembler, хеши
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Комментариeв нет

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0057 сек.) / Память: 4.5 Mb
Наверх