利用windows api 计算各类校验
BOOL GetMemHash( UINT algId, BYTE* pbData, DWORD dwDataLen, BYTE* pbHash,DWORD* pdwHashLen ){
BOOL ret=FALSE;
HCRYPTPROV hProv;
HCRYPTHASH hHash;
if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
return ret;
if(!CryptCreateHash(hProv, algId, 0, 0, &hHash))
{
goto release1;
}
if(!CryptHashData(hHash, pbData, dwDataLen, 0))
{
goto release2;
}
if (*pdwHashLen==0)
{
DWORD dwSize;
*pdwHashLen = sizeof(dwSize);
if (!CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE*)(&dwSize), pdwHashLen, 0))
{
goto release2;
}
*pdwHashLen = dwSize;
}
if (!CryptGetHashParam(hHash, HP_HASHVAL, pbHash, pdwHashLen, 0))
{
goto release2;
}
ret=TRUE;
release2: CryptDestroyHash(hHash);
release1: CryptReleaseContext(hProv, 0);
return ret;
}
|