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);
}
相關文章
- 計算一個檔案的 md5 值很費時間嗎?
- C語言練手專案--C 語言製作簡單計算器C語言
- C語言-檔案讀寫C語言
- C語言關於標頭檔案的使用C語言
- c語言多檔案編譯C語言編譯
- C語言實現檔案加密C語言加密
- 用c語言處理檔案C語言
- C語言 - 標頭檔案包含C語言
- C語言:迴文數計算C語言
- C語言判斷檔案存在和建立檔案C語言
- C語言:使用函式計算兩點間的距離C語言函式
- 初學計算機語言者(C語言,C++,java,pytion,C#)計算機C語言C++JavaC#
- 【C語言】linux下多檔案編譯C語言Linux編譯
- C語言位運算C語言
- 五種C語言非數值計算的常用經典排序演算法C語言排序演算法
- 比較檔案是否相同,(比較MD5值)
- C語言實現MD5加密,竟如此簡單!C語言加密
- C語言如何計算陣列的長度C語言陣列
- C語言計算輸入字元的個數C語言字元
- C語言:計算輸入字元的個數C語言字元
- 前端通過spark-md5.js計算本地檔案md5前端SparkJS
- 使用易語言COM物件取檔案版本物件
- C 語言標頭檔案作用的簡單理解
- C語言標頭檔案到底是什麼?C語言
- (計算機二級C語言)程式修改題<99>計算機C語言
- C語言程式設計-長整數加法運算C語言程式設計
- 算數表示式求值--c語言課程設計C語言
- C語言實現檔案複製功能(包括文字檔案和二進位制檔案)C語言
- 判斷檔案為文字檔案還是二進位制檔案(C語言實現)C語言
- js計算md5JS
- C 語言專案中標頭檔案包含的最佳實踐
- C語言標頭檔案組織與包含原則C語言
- 如何組織構建多檔案 C 語言程式(二)
- 如何組織構建多檔案 C 語言程式(一)
- c語言,批次處理檔案,進行gzip壓縮C語言
- 如何系統學習C 語言(下)之 檔案篇
- c語言巨集的使用C語言
- Go語言複製檔案Go