我需要比较两个字符串的哈希值。
我使用字符串"template"进行测试。
但是我为此字符串得到了不同的哈希值,因此它总是不相同。
我使用CryptoApi和MD4
int _tmain(int argc, _TCHAR* argv[])
{
std::hash_map<int,int> table;
HCRYPTPROV hProv1,hProv2;
BYTE *pbBuffer1=(BYTE*)"template";//data to hash
DWORD dwBufferLen1=strlen((char*)pbBuffer1)+1;
HCRYPTHASH hHash1,hHash2;
//first hash
CryptAcquireContext(&hProv1,NULL,NULL,PROV_RSA_AES,0);
CryptCreateHash(hProv1,CALG_MD4,0,0,&hHash1);
CryptHashData(hHash1,pbBuffer1,dwBufferLen1,0);
/*---------*/
BYTE *pbBuffer2=(BYTE*)"template";//data to hash
DWORD dwBufferLen2=strlen((char*)pbBuffer2)+1;
//second hash
CryptAcquireContext(&hProv2,NULL,NULL,PROV_RSA_AES,0);
CryptCreateHash(hProv2,CALG_MD4,0,0,&hHash2);
CryptHashData(hHash2,pbBuffer2,dwBufferLen2,0);
if (hHash1==hHash2)
printf("The Same\n");
else printf("Not same\n");
/*---------*/
std::cout<<hHash1<<std::endl;
std::cout<<hHash2<<std::endl;
if (hProv1)
CryptReleaseContext(hProv1,0);
if (hProv2)
CryptReleaseContext(hProv2,0);
system("pause");
return 0;
}
例如hHash1中的哈希值
691136
hHash2中的哈希值
691216
最佳答案
正如其他答案所指出的那样,hHash1
和hHash2
是不透明的句柄-比较它们是没有意义的,因为这类似于比较具有相同值的两个不同对象的地址。
使用 CryptGetHashParam
来获取哈希值并进行比较: