1 CMD5Encrypt::CMD5Encrypt()
2 {
3 4 }
5 6 CMD5Encrypt::~CMD5Encrypt()
7 {
8 9 }
10 //将BYTE数组转换成字符串
11 const char * CMD5Encrypt::Hex2ASC(
const BYTE *Hex,
int Len)
12 {
13 static char ASC[4096 * 2];
14 int i;
15 16 for (i = 0; i < Len; i++)
17 {
18 ASC[i*2] = "0123456789ABCDEF"[Hex[i] >> 4];
19 ASC[i*2 + 1] = "0123456789ABCDEF"[Hex[i] & 0x0F];
20 }
21 ASC[i*2] = '\0';
22 return ASC;
23 }
24 //32位进行MD5加密
25 const char * CMD5Encrypt::md5(
const char * str)
26 {
27 MD5_CTX ctx;
//MD5运算使用的数据结构
28 const unsigned
char * buf
29 = reinterpret_cast<
const unsigned
char *>(str);
30 //判断加密字符串的长度
31 int len = strlen(str);
32 HINSTANCE hDLL;
33 if ((hDLL = LoadLibrary(_T("advapi32.dll"))) > 0)
34 {
35 MD5Init = (PMD5Init)GetProcAddress(hDLL,"MD5Init");
36 MD5Update = (PMD5Update)GetProcAddress(hDLL,"MD5Update");
37 MD5Final = (PMD5Final)GetProcAddress(hDLL,"MD5Final");
38 39 MD5Init(&ctx);
40 MD5Update(&ctx, buf, len);
41 MD5Final(&ctx);
42 }
43 return Hex2ASC(ctx.digest, 16);
44 }
备注:记得在.h文件增加第一步定义的数据结构的引用。第三步:调用第二步定义的MD5加密类实现数据加密 1 void CMD5Dlg::OnBnClickedMd5()
2 {
3 //获取待加密的字符串
4 CString str;
5 GetDlgItem(IDC_EDIT3)->GetWindowTextW(str);
6 //MD5加密
7 CMD5Encrypt md5;
8 USES_CONVERSION;
9 const char* res=md5.md5(T2A(str));
10 //显示结果
11 GetDlgItem(IDC_EDIT4)->SetWindowTextW(A2T(res));
12 }
至此,VC对字符串进行MD5加密遍完成了,实现效果如下: