Visual C++ 7.1Visual C++ 8.0Windows VistaVisual C++ 7.0C++/CLIWindows 2003Visual C++ 6.0Windows XP初学者C中级开发WindowsC++
MD5 文件创建和验证






3.35/5 (10投票s)
用于创建/验证 MD5 文件的工具

引言
在密码学中,MD5(消息摘要算法 5)是一种广泛使用、部分不安全的密码学哈希函数,具有 128 位的哈希值。 作为一项互联网标准 (RFC 1321),MD5 已被应用于各种安全应用程序中,并且通常用于检查文件的完整性。 MD5 哈希通常表示为 32 位十六进制数字。
有关 MD5 的更多信息,请点击此处。
背景
此工具用于计算/验证 EXE 文件或文件夹及其子文件夹中多个 EXE 文件的 MD5 值。
Using the Code
此工具的基本功能如下。 此函数将接受 EXE 文件“FileName
”,并将以“MD5”的形式返回 MD5 值。 任何人都可以将此函数用于其/她的代码以获取 MD5 值。 只需将此函数复制并粘贴到您的代码中即可。 您应该包含头文件 <wincrypt.h>
。
int CalculateMD5(CString FileName, CString &MD5)
{
const size_t StringSize = FileName.GetLength() + 1;
size_t CharactersConverted = 0;
char *file = new char[StringSize];
//char file[1024];
wcstombs_s(&CharactersConverted, file,
FileName.GetLength()+1, FileName, _TRUNCATE);
int i, j;
FILE *fInput;
MD5Context md5Hash;
unsigned char bBuffer[4096];
unsigned char b;
char c;
if(!CryptStartup())
{
MessageBoxW(0, L"Could not start crypto library",
L"MD5", MB_ICONERROR);
return 0;
}
fInput = fopen(file, "rb");
if(!fInput)
{
MessageBoxW(0, L"Failed to open - Invalid File",
L"MD5", MB_ICONERROR);
CryptCleanup();
return 0;
}
memset(&md5Hash, 0, sizeof(MD5Context));
MD5Init(&md5Hash);
while(!feof(fInput)){
unsigned int nCount = fread(bBuffer, sizeof(unsigned char),
4096, fInput);
MD5Update(&md5Hash, bBuffer, nCount);
}
MD5Final(&md5Hash);
fclose(fInput);
//printf("\nChecksum of '%s' is: ", argv[1]);
char *Value = new char[1024];int k = 0;
for(i = 0; i < 16; i++)
{
b = md5Hash.digest[i];
for(j = 4; j >= 0; j -= 4)
{
c = ((char)(b >> j) & 0x0F);
if(c < 10) c += '0';
else c = ('a' + (c - 10));
//printf("%c", c);
Value[k] = c;
k++;
}
}
Value[k] = '\0';
CryptCleanup();
//CString cString;
MD5 = CString(Value);
//MessageBox(cString);
delete file;
delete Value;
return 1;
}
历史
- 2009年1月3日:初始发布