zoukankan      html  css  js  c++  java
  • 取文件MD5 WINAPI

     1 #include <windows.h>
     2 #include <wincrypt.h>
     3 #include <stdio.h>
     4 
     5 BOOL GetFileHash(LPCSTR lpFileName, LPSTR lpHash)
     6 {
     7     BOOL bResult = FALSE;
     8 
     9     HANDLE hFile = CreateFile(lpFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    10 
    11     if (hFile != INVALID_HANDLE_VALUE)
    12     {
    13         DWORD dwFileSize = GetFileSize(hFile, NULL);
    14 
    15         if (dwFileSize > 0)
    16         {
    17             PBYTE lpBuffer = (PBYTE)VirtualAlloc(NULL, dwFileSize, MEM_COMMIT, PAGE_READWRITE);
    18 
    19             if (lpBuffer != NULL)
    20             {
    21                 DWORD dwNumOfRead;
    22 
    23                 if (ReadFile(hFile, lpBuffer, dwFileSize, &dwNumOfRead, NULL) != FALSE)
    24                 {
    25                     HCRYPTPROV hProv;
    26 
    27                     if (CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) != FALSE)
    28                     {
    29                         HCRYPTHASH hHash;
    30 
    31                         if (CryptCreateHash(hProv, CALG_MD5, NULL, NULL, &hHash) != FALSE)
    32                         {
    33                             if (CryptHashData(hHash, lpBuffer, dwFileSize, NULL) != FALSE)
    34                             {
    35                                 BYTE bData[16]; DWORD dwDataLen;
    36 
    37                                 if (CryptGetHashParam(hHash, HP_HASHVAL, bData, &dwDataLen, NULL) != FALSE)
    38                                 {
    39                                     if (dwDataLen == 16)
    40                                     {
    41                                         LPSTR lpStr = lpHash;
    42 
    43                                         for (DWORD i = 0; i < dwDataLen; i++, lpStr += 2)
    44                                         {
    45                                             sprintf(lpStr, "%02X", bData[i]);
    46                                         }
    47 
    48                                         bResult = TRUE;
    49                                     }
    50                                 }
    51                             }
    52 
    53                             CryptDestroyHash(hHash);
    54                         }
    55 
    56                         CryptReleaseContext(hProv, NULL);
    57                     }
    58                 }
    59 
    60                 VirtualFree(lpBuffer, 0, MEM_RELEASE);
    61             }
    62         }
    63 
    64         CloseHandle(hFile);
    65     }
    66 
    67     return bResult;
    68 }
  • 相关阅读:
    v-charts 使用markline标线
    覆盖率平台(5)- 生成覆盖率报告
    覆盖率平台(4)- 测程启动
    覆盖率平台(3)- 测程
    覆盖率平台(2)- 服务配置
    vue路由this.route.push跳转页面不刷新
    递归对比json
    ssh远程执行遇到的一些坑
    免密git clone/git pull
    git用远程代码强制覆盖本地代码
  • 原文地址:https://www.cnblogs.com/crsky/p/6118510.html
Copyright © 2011-2022 走看看