Входные данные выравниваются так, чтобы их размер был сравним с 448 по модулю 512. Сначала дописывается единичный бит(даже если длина уже конгруэнтна сравнима с 448), затем необходимое число нулевых бит.
Дописывание 64-битного представления длины данных до выравнивания. Если длина превосходит два в 64 степени − 1, то дописываются младшие биты.
Инициализируются 4 переменных размером по 32 бита:
А = 01 23 45 67;
В = 89 AB CD EF;
С = FE DC BA 98;
D = 76 54 32 10.
Выравненные данные разбиваются на блоки по 32 бит, и каждый блок проходит 4 раунда из 16 операторов. Все операторы однотипны и имеют вид: [abcd k s i], определяемый как a = b + ((a + Fun(b,c,d) + X[k] + T < i > ) < < < s), где X - блок данных, а T[1..64] - 64х элементная таблица данных построенная следующим образом: T[i] = int(4294967296 * | sin(i) | ),
где, s - циклический сдвиг влево на s бит полученого 32-битного аргумента.
В первом раунде Fun F(X, Y, Z) = XY v (not X)Z
Во втором раунде Fun G(X, Y, Z) = XZ v (not Z)Y.
В третьем раунде Fun Н(Х, Y, Z) = Х xor Y xor Z.
В четвертом раунде Fun I(Х, Y, Z) = Y xor (X v (not Z)).
Это происходит следующим образом:
/*Сохраняются значения A, B, C и D оставшиеся после операций над предыдущими блоками(или их начальные значения если блок первый)*/
AA = A
BB = B
CC = C
DD = D
Раунд 1
/*[abcd k s i] a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
[ABCD 0 7 1][DABC 1 12 2][CDAB 2 17 3][BCDA 3 22 4]
[ABCD 4 7 5][DABC 5 12 6][CDAB 6 17 7][BCDA 7 22 8]
[ABCD 8 7 9][DABC 9 12 10][CDAB 10 17 11][BCDA 11 22 12]
[ABCD 12 7 13][DABC 13 12 14][CDAB 14 17 15][BCDA 15 22 16]
Раунд 2
/*[abcd k s i] a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
[ABCD 1 5 17][DABC 6 9 18][CDAB 11 14 19][BCDA 0 20 20]
[ABCD 5 5 21][DABC 10 9 22][CDAB 15 14 23][BCDA 4 20 24]
[ABCD 9 5 25][DABC 14 9 26][CDAB 3 14 27][BCDA 8 20 28]
[ABCD 13 5 29][DABC 2 9 30][CDAB 7 14 31][BCDA 12 20 32]
Раунд 3
/*[abcd k s t] a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
[ABCD 5 4 33][DABC 8 11 34][CDAB 11 16 35][BCDA 14 23 36]
[ABCD 1 4 37][DABC 4 11 38][CDAB 7 16 39][BCDA 10 23 40]
[ABCD 13 4 41][DABC 0 11 42][CDAB 3 16 43][BCDA 6 23 44]
[ABCD 9 4 45][DABC 12 11 46][CDAB 15 16 47][BCDA 2 23 48]
Раунд 4
/*[abcd k s t] a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
[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 + A
B = BB + B
C = CC + C
D = DD + D
Итоговый хеш - ABCD
И собственно, САБЖ, кто-нибудь вообще в этом пытался разобраться?
Спустя 11 часов, 41 минута, 13 секунд (21.11.2007 - 12:24) vasa_c написал(а):
В каком плане разобраться?
Чтобы реализовать алгоритм на каком-то языке программирования?
Или осознать всё глубинную математическую суть?
Чтобы реализовать алгоритм на каком-то языке программирования?
Или осознать всё глубинную математическую суть?
Спустя 13 часов, 30 минут, 11 секунд (22.11.2007 - 01:54) bret написал(а):
vasa_c
Именно глубинную суть. А именно "исходная строка была такой, на первом шаге имеем такую строку" и т.д., чтобы было понятно. Думаю, тут идея в том, чтобы написать функцию, похожую на мд5 и результат был бы похож на хэш мд5, но им не был
Именно глубинную суть. А именно "исходная строка была такой, на первом шаге имеем такую строку" и т.д., чтобы было понятно. Думаю, тут идея в том, чтобы написать функцию, похожую на мд5 и результат был бы похож на хэш мд5, но им не был
Спустя 12 часов, 47 минут, 54 секунды (22.11.2007 - 14:42) bars80080 написал(а):
Цитата
Думаю, тут идея в том, чтобы написать функцию, похожую на мд5 и результат был бы похож на хэш мд5, но им не был
может стоит тогда написать маленькую личную функцию доп кодирования и использовать md5
Спустя 28 минут, 33 секунды (22.11.2007 - 15:10) vasa_c написал(а):
bret, разработать алгоритм хеширования, сходный по характеристикам с md5?
Это не к нам.
Это не к нам.
Спустя 18 дней, 4 часа, 30 минут, 50 секунд (10.12.2007 - 19:41) ProfPHP написал(а):
Цитата(vasa_c @ 22.11.2007, 17:10) [snapback]29672[/snapback]
bret, разработать алгоритм хеширования, сходный по характеристикам с md5?
Это не к нам.
Это не к нам.
+1.
помимо самого метода шифрования рекомендую почитать как он разрабатывался.
_____________
Первый твой враг - не баг и не глюк, а твоя собственная невнимательность.