返回> 网站首页 

CryptoAPI数字证书 - 微缩图

yoours2011-08-30 17:14:47 阅读 1167

简介一边听听音乐,一边写写文章。

微缩图算法 sha1
微缩图......

微缩图的计算实际上是微缩图算法的hash值,它是将整个证书的内容作为被计算数据,最终得出的hash值。

代码如下:
DWORD GetHash(CONST BYTE *pbData, DWORD dwDataLen, ALG_ID algId, LPTSTR pszHash)
{
DWORD dwReturn = 0;
HCRYPTPROV hProv;
if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
return GetLastError();

HCRYPTHASH hHash;
//Alg Id:CALG_MD5,CALG_SHA
if(!CryptCreateHash(hProv, algId, 0, 0, &hHash)) 
{
dwReturn = GetLastError();
CryptReleaseContext(hProv, 0);
return dwReturn;
}

if(!CryptHashData(hHash, pbData, dwDataLen, 0))
{
dwReturn = GetLastError();
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
return dwReturn;
}

DWORD dwSize;
DWORD dwLen = sizeof(dwSize);
CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE*)(&dwSize), &dwLen, 0);

BYTE* pHash = new BYTE[dwSize];
dwLen = dwSize;
CryptGetHashParam(hHash, HP_HASHVAL, pHash, &dwLen, 0);

lstrcpy(pszHash, _T(""));
TCHAR szTemp[3];
for (DWORD i = 0; i < dwLen; ++i)
{
wsprintf(szTemp, "%02X", pHash[i]);
lstrcat(pszHash, szTemp);
}

delete [] pHash;

CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
return dwReturn;
}

调用示例
char * szHash = new char[41];
memset(szHash, 0, 41);
// SHA1
GetHash(pbData, dwDataLen, CALG_SHA, szHash);
微信小程序扫码登陆

文章评论

1167人参与,0条评论