您的位置:首页 > 其它

CryptoAPI -计算md5

2008-06-12 15:49 211 查看
//输入内容的缓冲区输出内容的缓冲区输入内容的长度

BOOLMD5Digest(PBYTEcsBuffer,LPTSTRcsOutBuffer,DWORDdwLen)

{

HCRYPTPROVhCryptProv;

HCRYPTHASHhHash;

BYTEbHash[0x7f];

DWORDdwHashLen=32;//TheMD5algorithmalwaysreturns16bytes.

DWORDcbContent=dwLen;

BYTE*pbContent=newBYTE[dwLen];

memcpy(pbContent,csBuffer,dwLen);

if(CryptAcquireContext(&hCryptProv,

NULL,NULL,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT|CRYPT_MACHINE_KEYSET))

{

if(CryptCreateHash(hCryptProv,

CALG_MD5,	//algorithmidentifierdefinitionssee:wincrypt.h

0,0,&hHash))

{

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

{

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

{

//Makeastringversionofthenumericdigestvalue

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

{

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

}

}

else

returnfalse;

}

else

returnfalse;

}

else

returnfalse;

}

else

returnfalse;

CryptDestroyHash(hHash);

CryptReleaseContext(hCryptProv,0);

//	CStringstr;

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

//	AfxMessageBox(str);

delete[]pbContent;

returnTRUE;

}


字符"abc"的ANSI编码和unicode编码计算的MD5值是不同的!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: