Цифровая подпись
Категория реферата: Рефераты по информатике, программированию
Теги реферата: онегин сочинение, конспекты по литературе
Добавил(а) на сайт: Ogarkov.
Предыдущая страница реферата | 1 2 3 4 | Следующая страница реферата
Длина сообщения в битах заносится в буфер i[0. . 1] следующим образом:
mdContext->i[0] += ((UINT4)inLen i[1] += ((UINT4)inLen >> 29);
Следующий участок кода выполняет следующие действия:
while (inLen--)
{
/* добавляем новый символ в буфер, инкрементируя mdi */
mdContext->in[mdi++] = *inBuf++;
/* Если необходимо выполняем преобразование */
if (mdi == 0x40)
{
for (i = 0, ii = 0; i < 16; i++, ii += 4)
in[i] = (((UINT4)mdContext->in[ii+3]) in[ii+2]) in[ii+1]) in[ii]);
Transform (mdContext->buf, in);
mdi = 0;
}
}
Пока уменьшаемая на 1 длина переданного в функцию сообщения не станет равной нулю выполняем следующие действия:
Заносим новый символ из входного буфера функции в 64-х байтный буфер структуры MD5_CTX, увеличивая при этом переменную mdi на 1. Если mdi равна 64, то преобразуем
однобайтные символы буфера in[] структуры MD5_CTX в 4-х байтные величины типа UINT4, заносим в промежуточный буфер на 16 величин типа UINT4, и далее передаем функции Transform(). Присваиваем переменной mdi 0.
void MD5Final (MD5_CTX *mdContext)
Функция завершает вычисление Message Digest и заносит полученное значение в структуре MD5_CTX в символьный буфер digest[0. . . 15].
Входным параметром функции является указатель на структуру MD5_CTX.
Основные моменты:
Расширение сообщения дополнительными заполняющими символами из таблицы PADDING[]
/* Подсчет длины сообщения в байтах по модулю 64 */
mdi = (int)((mdContext->i[0] >> 3) & 0x3F);
/* Расширить до 56 по модулю 64 */
padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi);
MD5Update(mdContext, PADDING, padLen);
Присоединение битов длины и вызов функции Transform().
in[14] = mdContext->i[0];
in[15] = mdContext->i[1];
for (i = 0, ii = 0; i < 14; i++, ii += 4)
in[i] = (((UINT4)mdContext->in[ii+3]) in[ii+2]) in[ii+1]) in[ii]);
Transform (mdContext->buf, in);
Сохранение буфера в digest(т. е. получение окончательного Message Digest):
for (i = 0, ii = 0; i < 4; i++, ii += 4)
{
mdContext->digest[ii] = (unsigned char)(mdContext->buf[i] & 0xFF);
mdContext->digest[ii+1] = (unsigned char)((mdContext->buf[i] >> 8) & 0xFF);
Рекомендуем скачать другие рефераты по теме: учебный реферат, понятие культуры.
Предыдущая страница реферата | 1 2 3 4 | Следующая страница реферата