《计算机信息安全》实验指导书 下载本文

《计算机信息安全》实验指导书

void MD5Update(MD5_CTX *context,unsigned char *input,unsigned int inputLen) {//MD5块处理函数

unsigned int i,index,partLen;

index = (unsigned int)((context->count[0] >> 3) & 0x3F);

if ((context->count[0] += ((UINT4)inputLen << 3))< ((UINT4)inputLen << 3)) context->count[1]++;

context->count[1] += ((UINT4)inputLen >> 29); partLen = 64 - index; if (inputLen >= partLen) {

MD5_memcpy((POINTER)&context->buffer[index], (POINTER)input, partLen); MD5Transform (context->state, context->buffer); for (i = partLen; i + 63 < inputLen; i += 64)

index = 0; } else i = 0;

MD5_memcpy((POINTER)&context->buffer[index], (POINTER)&input[i],inputLen-i); }

void MD5Final(unsigned char digest[16],MD5_CTX *context)

{/*完成函数,context指向上面处理过的结构体,digest[16]是用来存储结果的缓冲区 这个函数对未完成的信息先进行填充,然后处理,并把最终结果存储在digest[16]中*/ unsigned char bits[8]; unsigned int index, padLen; Encode (bits, context->count, 8);

index = (unsigned int)((context->count[0] >> 3) & 0x3f); padLen = (index < 56) ? (56 - index) : (120 - index); MD5Update (context, PADDING, padLen);

14

MD5Transform (context->state, &input[i]);

《计算机信息安全》实验指导书

MD5Update (context, bits, 8); Encode (digest, context->state, 16);

MD5_memset ((POINTER)context, 0, sizeof (*context)); }

3、主函数

#include \#include #include #include #define RAND_MAX 0x7fff void main(void) {

unsigned char *inputData;

char *inp = (char *)malloc(sizeof(char)*1024); inputData=(unsigned char*)inp; unsigned char* hashstr; int i,x;

time_t t; //这两行保证每次产生的随机数不同 int len;

srand( (unsigned) time( &t ) ); len = rand()*200/RAND_MAX; inp[len]='\\0'; for(i=0;i

x = rand()*16/RAND_MAX; if(x<10)

inp[i] = 48 + x; else if(x>9 && x<16) inp[i] = 65 + x -10;

}

15

《计算机信息安全》实验指导书

printf(\明文字符串是: %s\\n\\n\

if ((hashstr = (unsigned char *) malloc(17)) == NULL) {

printf(\ exit(1); // terminate program if out of memory }

MD5String(inputData,hashstr); //调用MD5算法实现函数 printf(\明文经过MD5得到的消息摘要是:%s\\n\ }

七 实验结果

由于在程序中使用了语句int i,x;和time_t t;,保证了每次产生的明文信息均不同,故经过MD5算法运算,得到的消息摘要MD(x)也是不相同的。

八 思考题

1、简述消息认证码MAC的基本原理。 2、分析MAC与消息摘要的区别。

16