¡¶¼ÆËã»úÐÅÏ¢°²È«¡·ÊµÑéÖ¸µ¼Êé
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
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