C語言 使用Cryptdll計算檔案md5值
typedef struct {
ULONG i[2];
ULONG buf[4];
unsigned char in[64];
unsigned char digest[16];
} MD5_CTX;
//定義函式指標
typedef void (WINAPI* PMD5Init)(MD5_CTX* context);
typedef void (WINAPI* PMD5Final)(MD5_CTX* context);
typedef void (WINAPI* PMD5Update)(MD5_CTX* context, const unsigned char* input, unsigned int inlen);
void GetFileMD5(CString fileName, LPWSTR strBuf)
{
FILE* ff;
unsigned long nSize = 1024;
char* rBuff = (char*)malloc(sizeof(char) * nSize);
unsigned long rCount = 0;
MD5_CTX context;
//載入微軟提供MD5計算的dll檔案
HMODULE hdll = LoadLibrary(L"Cryptdll.dll");
PMD5Init m_pFuncMD5Init = NULL;
PMD5Final m_pFuncMD5Final = NULL;
PMD5Update m_pFuncMD5Update = NULL;
if (hdll == NULL)
{
printf("load dll Cryptdll faild\n");
exit(1);
}
//獲得相應的函式地址
m_pFuncMD5Init = (PMD5Init)GetProcAddress(hdll, "MD5Init");
m_pFuncMD5Final = (PMD5Final)GetProcAddress(hdll, "MD5Final");
m_pFuncMD5Update = (PMD5Update)GetProcAddress(hdll, "MD5Update");
if (!(m_pFuncMD5Update && m_pFuncMD5Init && m_pFuncMD5Final))
{
FreeLibrary(hdll);
printf("get function faild\n");
exit(2);
}
//初始化context
ZeroMemory(&context, sizeof(MD5_CTX));
m_pFuncMD5Init(&context);
//開啟一個測試檔案
if (!(ff = _wfopen(fileName, L"rb")))
{
printf("open file faild\n");
exit(3);
}
while (rCount = fread(rBuff, sizeof(char), nSize, ff))
{
m_pFuncMD5Update(&context, (const unsigned char*)rBuff, rCount);
}
m_pFuncMD5Final(&context);
//此處下斷點,除錯狀態從Watch中檢視cnotext.digest域為檔案MD5值
//for (int i = 0; i < 16; i++)
//{
// printf("%X", context.digest[i]);
//}
WCHAR pbuf[32];
for (int i = 0; i < 16; i++)
{
swprintf(pbuf, 32, L"%02X", context.digest[i]);
//sprintf(pbuf, "%X", context.digest[i]);
wcsncat(strBuf, pbuf, 33);
//wcsncat_s(strBuf, 32, pbuf, 2);
}
//printf("%s", strBuf);
fclose(ff);
free(rBuff);
}
相關文章
- Go語言如何獲得一個檔案的md5值Go
- C語言 檔案IO的使用C語言
- C#獲取檔案MD5值方法C#
- 計算一個檔案的 md5 值很費時間嗎?
- C語言練手專案--C 語言製作簡單計算器C語言
- C語言檔案操作C語言
- C語言(檔案操作)C語言
- C語言(檔案加解密)C語言解密
- C語言標頭檔案的使用(轉載)C語言
- C語言關於標頭檔案的使用C語言
- C語言:迴文數計算C語言
- 用c語言處理檔案C語言
- c語言多檔案編譯C語言編譯
- c語言檔案操作相關C語言
- c語言拷貝檔案程式C語言
- C語言實現檔案加密C語言加密
- C語言/C++讀取檔案資訊C語言C++
- C語言檔案與目錄(五)檔案鎖C語言
- C語言程式設計獲取PE檔案DOS頭C語言程式設計
- 獲得檔案的大小(c語言)C語言
- C語言檔案與目錄(一)C語言
- C語言檔案與目錄(二)C語言
- C語言檔案與目錄(三)C語言
- C語言:使用函式計算兩點間的距離C語言函式
- C#中計算流指定位置和長度的MD5值C#
- phpmailer中文語言檔案及使用PHPAI
- C語言位運算C語言
- 【c語言】求絕對值C語言
- 五種C語言非數值計算的常用經典排序演算法C語言排序演算法
- C語言標頭檔案#include的作用C語言
- C語言關於檔案操作的命令C語言
- 初學計算機語言者(C語言,C++,java,pytion,C#)計算機C語言C++JavaC#
- C語言:計算輸入字元的個數C語言字元
- C語言計算輸入字元的個數C語言字元
- C語言如何計算陣列的長度C語言陣列
- 用C語言編寫的公式計算器C語言公式
- 比較檔案是否相同,(比較MD5值)
- C語言實現MD5加密,竟如此簡單!C語言加密