不太确认结果对不对,记录一下,供大家参考
/*
info 是源数据
sha1是结果
*/
int getSha1Value(char * info, char* sha1)
{
HCRYPTPROV hCryptProv;
DWORD dwHashLen;
DWORD dwHashLenSize = sizeof(DWORD);
HCRYPTHASH hHash;
BYTE *pbData;
BYTE *pbBuffer = (BYTE *)info;
DWORD dwBufferLen = strlen((char *)pbBuffer) + 1;
if (!CryptAcquireContext(
&hCryptProv,
NULL,
NULL,
PROV_RSA_FULL,
0))
{
printf("Acquisition of context failed.\n");
return 0;
}
if (!CryptCreateHash(
hCryptProv,
CALG_SHA1,
0,
0,
&hHash))
{
printf("Error during CryptBeginHash!\n");
return 0;
}
if (!CryptHashData(
hHash,
pbBuffer,
dwBufferLen,
0))
{
printf("Error during CryptHashData.\n");
return 0;
}
if (!CryptGetHashParam(
hHash,
HP_HASHSIZE,
(BYTE *)&dwHashLen,
&dwHashLenSize,
0))
{
printf("get Hash value error, errcode is %d\n", GetLastError());
return 0;
}
if (!(pbData = (BYTE*)malloc(dwHashLen)))
{
printf("malloc hash buf error!\n");
return 0;
}
if(!CryptGetHashParam(hHash, HP_HASHVAL, pbData, &dwHashLen, 0))
{
printf("get Hash value error, errcode is %d\n", GetLastError());
return 0;
}
memcpy(sha1, pbData, dwHashLen);
return dwHashLen;
}