张志松
记录工作点滴,留下人生轨迹。(zezese@163.com)
posts - 68,  comments - 11,  trackbacks - 0

      用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 张志松 阅读(1546) 评论(0)  编辑 收藏 引用 所属分类: VC/MFC

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2012年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

转载

搜索

  •  

最新评论

阅读排行榜

评论排行榜