用Dependency Walker 打开系统目录下的ADVAPI32.DLL,可以发现ADVAPI32.DLL导出了MD5的三个函数:MD5Init,MD5Update,MD5Final。如下图所示:
这个三个函数的原型如下:
void WINAPI MD5Init(MD5_CTX* lpCtx);
void WINAPI MD5Update(MD5_CTX* lpCtx, const void * lpBuf, unsigned int nLen);
void WINAPI MD5Final(MD5_CTX* lpCtx);
其中MD5_CTX结构体为:
struct MD5_CTX
{
ULONG num[2]; /* number of _bits_ handled mod 2^64 */
ULONG buf[4]; /* scratch buffer */
BYTE input[64]; /* input buffer */
BYTE digest[16]; /* actual digest after MD5Final call */
};
现在我们用这个三个函数来计算字符串的MD5:
CString CalcStringMD5(CString strSrc)
{
MD5_CTX ctx = {0};
MD5Init(&ctx);
MD5Update(&ctx, strSrc.GetBuffer(), strSrc.GetLength());
MD5Final(&ctx);
strSrc.ReleaseBuffer();
TCHAR szTmp[33] = {0};
for (UINT i = 0; i < 16; i++)
{
wsprintf(szTmp + i * 2, _T("%02x"), ctx.digest[i]);
}
CString strMD5 = szTmp;
return strMD5;
}
该函数只支持多字节编码,UNICODE编码请自行转换,编译需要MD5.lib链接库。以上代码在VS2003+XP下测试成功。
posted on 2010-07-25 16:01
张志松 阅读(1586)
评论(0) 编辑 收藏 引用 所属分类:
VC/MFC