Алгоритм построения цифрового дайджеста MD5 [Ло Шу] (pdf) читать постранично, страница - 3
Книга в формате pdf! Изображения и текст могут не отображаться!
[Настройки текста] [Cбросить фильтры]
R1(B,C,D,A,X[12],20,0x8d2a4c8aL);
/* Раунд 2 */
R2(A,B,C,D,X[ 5], 4,0xfffa3942L);
R2(D,A,B,C,X[ 8],11,0x8771f681L);
R2(C,D,A,B,X[11],16,0x6d9d6122L);
R2(B,C,D,A,X[14],23,0xfde5380cL);
R2(A,B,C,D,X[ 1], 4,0xa4beea44L);
R2(D,A,B,C,X[ 4],11,0x4bdecfa9L);
R2(C,D,A,B,X[ 7],16,0xf6bb4b60L);
R2(B,C,D,A,X[10],23,0xbebfbc70L);
R2(A,B,C,D,X[13], 4,0x289b7ec6L);
R2(D,A,B,C,X[ 0],11,0xeaa127faL);
R2(C,D,A,B,X[ 3],16,0xd4ef3085L);
R2(B,C,D,A,X[ 6],23,0x04881d05L);
R2(A,B,C,D,X[ 9], 4,0xd9d4d039L);
R2(D,A,B,C,X[12],11,0xe6db99e5L);
R2(C,D,A,B,X[15],16,0x1fa27cf8L);
R2(B,C,D,A,X[ 2],23,0xc4ac5665L);
/* Раунд 3 */
R3(A,B,C,D,X[ 0], 6,0xf4292244L);
R3(D,A,B,C,X[ 7],10,0x432aff97L);
R3(C,D,A,B,X[14],15,0xab9423a7L);
R3(B,C,D,A,X[ 5],21,0xfc93a039L);
R3(A,B,C,D,X[12], 6,0x655b59c3L);
R3(D,A,B,C,X[ 3],10,0x8f0ccc92L);
R3(C,D,A,B,X[10],15,0xffeff47dL);
R3(B,C,D,A,X[ 1],21,0x85845dd1L);
R3(A,B,C,D,X[ 8], 6,0x6fa87e4fL);
R3(D,A,B,C,X[15],10,0xfe2ce6e0L);
R3(C,D,A,B,X[ 6],15,0xa3014314L);
R3(B,C,D,A,X[13],21,0x4e0811a1L);
R3(A,B,C,D,X[ 4], 6,0xf7537e82L);
R3(D,A,B,C,X[11],10,0xbd3af235L);
R3(C,D,A,B,X[ 2],15,0x2ad7d2bbL);
R3(B,C,D,A,X[ 9],21,0xeb86d391L);
A
B
C
D
=
=
=
=
c->A
c->B
c->C
c->D
+=
+=
+=
+=
A;
B;
C;
D;
}
}
Именно здесь и сокрыто основное отличие в реализации двух алгоритмов.
Как это реализовано в Microsoft Windows
Microsoft Windows прячет от нас детали реализации алгоритма построения цифрового
дайджеста MD5 и предлагает для работы только Crypto API – прикладной программный
интерфейс для работы с криптографической библиотекой.
Crypto API построена по принципу так называемых "провайдеров", или в более
русскоязычном варианте – модулей, обеспечивающих функции криптозащиты. Из этого
следует, что вы можете построить свой собственный модуль, следуя требованиям
библиотеки Crypto API, зарегистрировать его и использовать.
Но мы посмотрим только на ту часть библиотеки, которая позволит нам построить
цифровой дайджест MD5.
Для построения цифрового дайджеста блока данных и для работы с полученным
цифровым дайджестом Crypto API предлагает четыре метода:
• CryptCreateHash – функция используется для инициализации хэширования
блока данных. Она возвращает дескриптор хэш-объекта, который затем можно
использовать для хэширования данных.
• CryptGetHashParam – функция, используемая для извлечения значения хэша.
• CryptHashData – функция, выполняющая хэширование блока данных.
•
CryptDestroyHash – функция для освобождения дескриптора полученного от
функции создания хэш-объекта CryptCreatehash.
Метод CryptHashData используеься для построения промежуточного цифрового
дайджеста блока дынных. Эта функция может быть вызвана несколько раз для
обработки длинного сообщения, разбитого на блоки различной длины.
В качестве примера мы рассмотрим построение цифрового дайджеста для блока данных
длиной dwBufferLen, которые расположены в памяти по адресу pBuffer. Предполагается,
что данные подлежащие хэшированию полностью расположены в буфере. Поэтому
после извлечения цифрового дайджеста с помощью метода CryptoGetHashParam
дальнейшее хэширование данных с помощью данного хэш-объекта более не возможно.
#include
// определения CryptoAPI
/*
Значение некоторых констант, используемых в данном примере:
#define ALG_CLASS_HASH
(4
Последние комментарии
24 минут 56 секунд назад
15 часов 26 минут назад
17 часов 59 минут назад
18 часов 28 минут назад
18 часов 34 минут назад
12 часов 50 минут назад