Реферат: Цифровая подпись
Если n > 32, то результат равен нулю.
Функции
void MD5Init ( MD5_CTX *mdContext)
Функция MD5Init(MD5_CTX *mdContext) выполняет инициализацию некоторых полей структуры Message Digest MD5_CTX В качестве параметра функция получает указатель на структуру MD5_CTX.
{
/* Обнуление полей, которые будут содержать длину сообщения */
mdContext->i[0] = mdContext->i[1] = (UINT4)0;
/* Загрузка магических констант инициализации. */
mdContext->buf[0] = (UINT4)0x67452301L;
mdContext->buf[1] = (UINT4)0xefcdab89L;
mdContext->buf[2] = (UINT4)0x98badcfeL;
mdContext->buf[3] = (UINT4)0x10325476L;
}
void MD5Update (register MD5_CTX *mdContext, unsigned char *inBuf, unsigned int inLen)
Данная функция обрабатывает содержимое структуры MD5_CTX.
В качестве параметров функция получает:
Указатель mdContext на структуру MD5_CTX;
Cимвольный буфер inBuf[], который содержит символы исходного сообщения, чей Message Digest мы подсчитываем; Длину inLen передаваемого буфера.
Вначале подсчитывается целочисленная величина mdi:
mdi = (int)((mdContext->i[0] >> 3) & 0x3F);
Эта величина равна длине сообщения в байтах по модулю 64. Длина сообщения в битах хранится в структуре MD5_CTX в буфере i[0. . 1].
Длина сообщения в битах заносится в буфер i[0. . 1] следующим образом:
mdContext->i[0] += ((UINT4)inLen << 3);
mdContext->i[1] += ((UINT4)inLen >> 29);
Следующий участок кода выполняет следующие действия:
while (inLen--)
{
/* добавляем новый символ в буфер, инкрементируя mdi */
mdContext->in[mdi++] = *inBuf++;