MD5file.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include "md5.h"
  6. char *MD5_file (char *path, int md5_len)
  7. {
  8. FILE *fp = fopen (path, "rb");
  9. MD5_CTX mdContext;
  10. int bytes;
  11. unsigned char data[1024];
  12. char *file_md5;
  13. int i;
  14. if (fp == NULL)
  15. {
  16. fprintf (stderr, "fopen %s failed\n", path);
  17. return NULL;
  18. }
  19. MD5Init (&mdContext);
  20. while ((bytes = fread (data, 1, 1024, fp)) != 0)
  21. {
  22. MD5Update (&mdContext, data, bytes);
  23. }
  24. MD5Final (&mdContext);
  25. file_md5 = new char[(md5_len + 1) * sizeof(char)];
  26. if(file_md5 == NULL)
  27. {
  28. fprintf(stderr, "malloc failed.\n");
  29. fclose (fp);
  30. return NULL;
  31. }
  32. memset(file_md5, 0, (md5_len + 1));
  33. if(md5_len == 16)
  34. {
  35. for(i=4; i<12; i++)
  36. {
  37. sprintf(&file_md5[(i-4)*2], "%02x", mdContext.digest[i]);
  38. }
  39. }
  40. else if(md5_len == 32)
  41. {
  42. for(i=0; i<16; i++)
  43. {
  44. sprintf(&file_md5[i*2], "%02x", mdContext.digest[i]);
  45. }
  46. }
  47. else
  48. {
  49. fclose(fp);
  50. delete file_md5;
  51. return NULL;
  52. }
  53. fclose (fp);
  54. return file_md5;
  55. }