123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- #include "stdafx.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #include "md5.h"
- namespace MD5FILE
- {
-
- char *MD5_file (char *path, int md5_len)
- {
- FILE *fp = fopen (path, "rb");
- MD5Data::MD5_CTX mdContext;
- int bytes;
- unsigned char data[1024];
- char *file_md5;
- int i;
-
- if (fp == NULL)
- {
- fprintf (stderr, "fopen %s failed\n", path);
- return NULL;
- }
-
- MD5Init (&mdContext);
- while ((bytes = fread (data, 1, 1024, fp)) != 0)
- {
- MD5Update (&mdContext, data, bytes);
- }
- MD5Final (&mdContext);
-
- file_md5 = (char *)malloc((md5_len + 1) * sizeof(char));
- if(file_md5 == NULL)
- {
- fprintf(stderr, "malloc failed.\n");
- return NULL;
- }
- memset(file_md5, 0, (md5_len + 1));
-
- if(md5_len == 16)
- {
- for(i=4; i<12; i++)
- {
- sprintf(&file_md5[(i-4)*2], "%02x", mdContext.digest[i]);
- }
- }
- else if(md5_len == 32)
- {
- for(i=0; i<16; i++)
- {
- sprintf(&file_md5[i*2], "%02x", mdContext.digest[i]);
- }
- }
- else
- {
- fclose(fp);
- free(file_md5);
- return NULL;
- }
-
- fclose (fp);
- return file_md5;
- }
- char *MD5_data (char *pInputData, int md5_len)
- {
- MD5Data::MD5_CTX mdContext;
- //int bytes;
- unsigned char data[1024];
- char *file_md5;
- int i;
- if (pInputData == NULL)
- {
- fprintf (stderr, "input data is null\n");
- return NULL;
- }
- int nPos = 0;
- int nDataLen = strlen(pInputData);
- MD5Init (&mdContext);
- while (nDataLen > 0)
- {
- int len = nDataLen > 1024? 1024:nDataLen;
- memcpy(data, pInputData+nPos, len);
- MD5Update (&mdContext, data, len);
-
- nPos += len;
- nDataLen -= len;
- }
- MD5Final (&mdContext);
- file_md5 = (char *)malloc((md5_len + 1) * sizeof(char));
- if(file_md5 == NULL)
- {
- fprintf(stderr, "malloc failed.\n");
- return NULL;
- }
- memset(file_md5, 0, (md5_len + 1));
- if(md5_len == 16)
- {
- for(i=4; i<12; i++)
- {
- sprintf(&file_md5[(i-4)*2], "%02x", mdContext.digest[i]);
- }
- }
- else if(md5_len == 32)
- {
- for(i=0; i<16; i++)
- {
- sprintf(&file_md5[i*2], "%02x", mdContext.digest[i]);
- }
- }
- else
- {
- free(file_md5);
- return NULL;
- }
- return file_md5;
- }
- }
|