¡¶¼ÆËã»úÐÅÏ¢°²È«¡·ÊµÑéÖ¸µ¼Êé ÏÂÔر¾ÎÄ

¡¶¼ÆËã»úÐÅÏ¢°²È«¡·ÊµÑéÖ¸µ¼Êé

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)Ò²ÊDz»ÏàͬµÄ¡£

°Ë ˼¿¼Ìâ

1¡¢¼òÊöÏûÏ¢ÈÏÖ¤ÂëMACµÄ»ù±¾Ô­Àí¡£ 2¡¢·ÖÎöMACÓëÏûÏ¢ÕªÒªµÄÇø±ð¡£

16