Формализованный алгоритм расчёта CRC16

Для получения контрольной суммы, необходимо сгенерировать полином. Основными требованиями к полиному: его степень должна быть равна длине контрольной суммы в битах. При этом старший бит полинома обязательно должен быть равен “1”.

Из файла берется первое слово. В зависимости от того, равен ли старший бит этого слова “1” или нет, выполняем (или нет) операцию XOR на полином. Полученный результат, в не зависимости от того, выполнялась ли операция XOR, сдвигаем на один бит влево (т.е. умножаем на 2). После сдвига (умножения) теряется старый старший бит, а младший бит освобождается (обнуляется). На место младшего бита загружается очередной бит из файла. Операция повторяется до тех пор, пока не загрузиться последний бит файла.

После прохождения всего файла, в слове остается остаток, который и является контрольной суммой.

Adler32

Adler-32 — хеш-функция, разработанная Марком Адлером. Вычисляет значение контрольной суммы в соответствии с RFC 1950 для массива байт или его фрагмента. Данный алгоритм расчета контрольной суммы отличается от CRC32 производительностью. Adler-32 используется в библиотеке Zlib.

Snefru

Snefru – это однонаправленная хэш-функция, разработанная Ральфом Мерклом (Ralph Merkle). Snefru был египетским фараоном. Snefru хэширует сообщения произвольной длины, превращая их в 128-битовые 256-битовые значения.

Сначала сообщение разбивается на кусочки длиной по 512-m. Переменная m является длиной хэш-значения. Если выход – это 128-битовое значение, то длина кусочков равна 384 битам, а если выход - 256-битовое значение, то длина кусочков – 256 битов.

Сердцем алгоритма служит функция H, хэширующая 512-битовое значение в m-битовое. Первые m битов выхода H являются хэш-значением блока, остальные отбрасываются. Следующий блок добавляется к хэш-значению предыдущего блока и снова хэшируется. К первоначальному блоку добавляется строка нулей. После последнего блока (если сообщение состоит не из целого числа блоков, последний блок дополняется нулями) первые m битов добавляются к бинарному представлению длины сообщения и хэшируются последний раз.

Функция H основывается на E, обратимой функции блочного шифрования, работающей с 512 битовыми блоками. H – это последнее m битов выхода E, объединенные посредством XOR с первыми m битами входа E.

Безопасность Snefru опирается на функцию E, которая рандомизирует данные за несколько проходов. Каждый проход состоит из 64 рандомизирующих этапов. В каждом этапе в качестве входа S-блока используется другой байт данных. Выходное слово подвергается операции XOR с двумя соседними словами сообщения. Построение S-блоков аналогично построению S-блоков для Khafre. Кроме того, выполняется ряд циклических сдвигов. Оригинальный Snefru состоял из двух проходов. В настоящее время Меркл рекомендует использовать Snefru по крайней мере с восемью проходами. Однако в таком случае алгоритм становится значительно медленнее, чем MD5 и SHA.

ftp://parcftp.xerox.com/pub/hash/hash2.5a


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: