#include "precompile.h" #include #include #include #include "md5.h" char *MD5_file (char *path, int md5_len) { FILE *fp = fopen (path, "rb"); 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; }