CryptoAPI -计算md5

本文介绍了一个使用Windows Cryptography API实现的MD5哈希计算函数。该函数接收缓冲区作为输入并返回对应的MD5哈希值。文章还提到了不同编码方式下相同字符串的MD5值可能有所不同。
//输入内容的缓冲区 输出内容的缓冲区 输入内容的长度

BOOL MD5Digest(PBYTE csBuffer,LPTSTR csOutBuffer,DWORD dwLen)

{

	HCRYPTPROV hCryptProv; 

	HCRYPTHASH hHash; 

	BYTE bHash[0x7f]; 

	DWORD dwHashLen= 32; // The MD5 algorithm always returns 16 bytes. 



	DWORD cbContent=dwLen;

	BYTE* pbContent= new BYTE[dwLen];

	memcpy(pbContent,csBuffer,dwLen);



	if(CryptAcquireContext(&hCryptProv, 

		NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) 

	{



		if(CryptCreateHash(hCryptProv, 

			CALG_MD5,	// algorithm identifier definitions see: wincrypt.h

			0, 0, &hHash)) 

		{

			if(CryptHashData(hHash, pbContent, cbContent, 0))

			{



				if(CryptGetHashParam(hHash, HP_HASHVAL, bHash, &dwHashLen, 0)) 

				{

					// Make a string version of the numeric digest value

					for (int i = 0; i<dwHashLen; i++)

					{

						_stprintf(csOutBuffer, _T("%s%02x")  ,csOutBuffer,bHash[i]);

					}



				}

				else

					return false;



			}

			else 

				return false;

		}

		else 

			return false;



	}

	else 

		return false;



	CryptDestroyHash(hHash); 

	CryptReleaseContext(hCryptProv, 0); 

	//	CString str;

	//	str.Format(_T("%s"),csOutBuffer);

	//	AfxMessageBox(str);



	delete[] pbContent;

	return TRUE;



}
 
字符"abc"的ANSI编码和unicode编码计算的MD5值是不同的!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值