 |

27.09.2009, 01:00
|
|
Постоянный
Регистрация: 23.07.2009
Сообщений: 666
С нами:
8844086
Репутация:
50
|
|
Данный алгоритм является алгоритмом вычисления "хэш" функции (message digest). В качестве входных данных он принимает сообщение (поток данных) произвольной длины, и вычисляет 128-битный хэш. Нахождение двух различных входных строк, которые производили бы одинаковый MD5 хэш, или нахождение исходной строки по существующему хэш, представляется почти невозмжным (точнее, этим можно заняться имея огромные вычислительные ресурсы, плюс достаточный запас времени). MD5 алгоритм используется в приложениях криптографии и электронно-цифровых подписей для генерации ключа шифрования.
Алгоритм разработан, что бы быть достаточно быстрым на 32-битных системах и не требовать больших объемов памяти. MD5 является чуть более медленным, чем MD4, но является более устойчивым к криптографическим атакам.
Далее под "словом" будет подразумеваться количество информации в 32 бита, а под "байтом" - 8 бит. Последовательность бит интерпретируется в естественной форме - как последовательность байт, где каждая группа из 8 бит является отдельным байтом, причём старший бит байта идет первым. Аналогично представляется последовательность байт, как последовательность слов, только младший байт идет первым.
Предпологается, что в качестве входного потока имеется поток данных N бит. N - неотрицательное целое (возможно 0), не обязательно кратное 8. Для вычисления MD5 хэш функции неоходимо выполнить следующие 5 шагов.
Шаг 1: выравнивание потока.
Входной поток выравнивается так, что бы его длина стала конгруэнтной (сравнимой) с 448 по модулю 512. Выравнивание происходит следующим образом: к потоку добавляется один бит '1', а затем биты '0' до тех пор, пока длина потока не будет сравнима с 448 по модулю 512.
Выравнивание происходит всегда, даже если длина потока была уже сравнима с 448 по модулю 512. Таким образом к потоку добавляется минимум 1 бит, максимум - 512.
Шаг 2: добавление длины.
64 битное представление длины входного потока (длины потока до выравниваия) добавляется к результату предидущего шага. Если длина потока превосходит 2^64, то добавляются младшие 64 бит. Эти биты добавляются как 2 32-битных слова, младшее слово добавляется первым.
Таким образом на этом шаге длина потока становится кратной 512 битам или 16 32-битным словам. Далее будем рассматривать входной поток как массив M[0 ... N-1] слов длиной N.
Шаг 3: инициализация MD буфера.
Буфер из 4 слов {A, B, C, D} используется для вычисления хэш функции, который инициализируется в следующие значения:
A = 0x67452301
B = 0xEFCDAB89
C = 0x98BADCFE
D = 0x10325476
Шаг 4: обработка потока блоками по 16 слов.
Определим четыре вспомогательные функции, каждая из которых принимает три параметра размеров в слово и производит результат - слово.
F(x, y, z) = (x & y) | (~x & z)
G(x, y, z) = (x & z) | (y & ~z)
H(x, y, z) = x ^ y ^ z
I(x, y, z) = y ^ (x | ~z)
Напомним, что & - побитовое И, | - побитовое ИЛИ, ^ - побитовое исключающее ИЛИ, ~ - побитовое отрицание. Функция F для каждого бита дает следующий результат: если X, то Y, иначе Z.
На этом шаге также используется таблица T[1..64], которая построена с помощью функции синуса: T = int(4294967296 * abs(sin(i))), где int() - целая часть. Например: T[1] = int(4294967296 * abs(sin(i))) = int(3614090360,282...) = 3614090360.
Также следует определить операцию x ) ) ) ) <<< s)
// исполнить 16 следующих операций
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
A += AA
B += BB
C += CC
D += DD
}
Шаг 5: вывод MD5.
Результат вычисления (хэш) представлен четырьмя 32 битными словами - A, B, C, D (младшим записывается A, старшим - D). 128-битный MD5 хэш готов !
Примеры:
"a" - cc175b9c0f1b6a831c399e269772661
"abc" - 90150983cd24fb0d6963f7d28e17f72
"abrakadabra" - bda3bfdfa868d04f403838f5776f25e
"1234567890123456789012345678901234567890123456789 01234567890123456
78901234567890" - 57edf4a22be3c955ac49da2e217b67a
Подробнее об алгоритме MD5 можно прочитать в RFC1321.
Если статья заинтересовала ставим + или говорим спасибо...
Спойлер
Автор: tiger@ibd.lv
|
|
|

29.09.2009, 01:00
|
|
Новичок
Регистрация: 22.09.2009
Сообщений: 1
С нами:
8756246
Репутация:
0
|
|
Думаю стоит добавить что алгоритм хеширования, разработанный профессором Рональдом Л. Ривестом из Массачусетского технологического института в 1991 году.
Вот сам RFC1321
IMAGE http://sniffer.xaknet.ru/smiles/img_2_660.gif
|
|
|
|
 |
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|