Advertisement
Guest User

MD5 Window

a guest
Nov 22nd, 2014
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <Wincrypt.h>
  4. #include "mspyLog.h"
  5.  
  6. #define BUFSIZE 1024
  7. #define MD5LEN 16
  8.  
  9. DWORD hash(FILE* fp, WCHAR filename[])
  10. {
  11. DWORD dwStatus = 0;
  12. BOOL bResult = FALSE;
  13. HCRYPTPROV hProv = 0;
  14. HCRYPTHASH hHash = 0;
  15. HANDLE hFile = NULL;
  16. BYTE rgbFile[BUFSIZE];
  17. DWORD cbRead = 0;
  18. BYTE rgbHash[MD5LEN];
  19. DWORD cbHash = 0;
  20. CHAR rgbDigits[] = "0123456789abcdef";
  21. //LPCWSTR filename = L"filename.txt";
  22. // Logic to check usage goes here.
  23. fprintf(fp, "calculate %s\n", filename);
  24. hFile = CreateFileW(filename,
  25. GENERIC_READ,
  26. FILE_SHARE_READ,
  27. NULL,
  28. OPEN_EXISTING,
  29. FILE_FLAG_SEQUENTIAL_SCAN,
  30. NULL);
  31.  
  32. if (INVALID_HANDLE_VALUE == hFile)
  33. {
  34. dwStatus = GetLastError();
  35. fprintf(fp, "Error opening file %s\nError: %d\n", filename,
  36. dwStatus);
  37. return dwStatus;
  38. }
  39. fwprintf(fp, L"Correct open: %d\n", filename,
  40. dwStatus);
  41.  
  42. // Get handle to the crypto provider
  43. if (!CryptAcquireContext(&hProv,
  44. NULL,
  45. NULL,
  46. PROV_RSA_FULL,
  47. CRYPT_VERIFYCONTEXT))
  48. {
  49. dwStatus = GetLastError();
  50. printf("CryptAcquireContext failed: %d\n", dwStatus);
  51. CloseHandle(hFile);
  52. return dwStatus;
  53. }
  54.  
  55. if (!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash))
  56. {
  57. dwStatus = GetLastError();
  58. printf("CryptAcquireContext failed: %d\n", dwStatus);
  59. CloseHandle(hFile);
  60. CryptReleaseContext(hProv, 0);
  61. return dwStatus;
  62. }
  63. bResult = ReadFile(hFile, rgbFile, BUFSIZE,
  64. &cbRead, NULL);
  65.  
  66.  
  67.  
  68. while (bResult)
  69. {
  70. if (0 == cbRead)
  71. {
  72. break;
  73. }
  74.  
  75. if (!CryptHashData(hHash, rgbFile, cbRead, 0))
  76. {
  77. dwStatus = GetLastError();
  78. printf("CryptHashData failed: %d\n", dwStatus);
  79. CryptReleaseContext(hProv, 0);
  80. CryptDestroyHash(hHash);
  81. CloseHandle(hFile);
  82. return dwStatus;
  83. }
  84. }
  85.  
  86. if (!bResult)
  87. {
  88. dwStatus = GetLastError();
  89. printf("ReadFile failed: %d\n", dwStatus);
  90. CryptReleaseContext(hProv, 0);
  91. CryptDestroyHash(hHash);
  92. CloseHandle(hFile);
  93. return dwStatus;
  94. }
  95.  
  96. cbHash = MD5LEN;
  97. if (CryptGetHashParam(hHash, HP_HASHVAL, rgbHash, &cbHash, 0))
  98. {
  99. fprintf(fp, "MD5 hash of file %s is: ", filename);
  100. for (DWORD i = 0; i < cbHash; i++)
  101. {
  102. fprintf(fp, "%c%c", rgbDigits[rgbHash[i] >> 4],
  103. rgbDigits[rgbHash[i] & 0xf]);
  104. }
  105. fprintf(fp, "\n");
  106. }
  107. else
  108. {
  109. dwStatus = GetLastError();
  110. printf("CryptGetHashParam failed: %d\n", dwStatus);
  111. }
  112.  
  113. CryptDestroyHash(hHash);
  114. CryptReleaseContext(hProv, 0);
  115. CloseHandle(hFile);
  116.  
  117. return dwStatus;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement