12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #include "precompile.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #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;
- }
|