16,471
社区成员
发帖
与我相关
我的任务
分享
d:\vc++projects\ceshi\ceshi.cpp(29) : error C2061: syntax error : identifier 'ALG_ID'
d:\vc++projects\ceshi\ceshi.cpp(35) : error C2065: 'HCRYPTPROV' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(35) : error C2146: syntax error : missing ';' before identifier 'hProv'
d:\vc++projects\ceshi\ceshi.cpp(35) : error C2065: 'hProv' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(37) : error C2065: 'CryptAcquireContext' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(37) : error C2065: 'PROV_RSA_FULL' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(37) : error C2065: 'CRYPT_VERIFYCONTEXT' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(43) : error C2065: 'HCRYPTHASH' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(43) : error C2146: syntax error : missing ';' before identifier 'hHash'
d:\vc++projects\ceshi\ceshi.cpp(43) : error C2065: 'hHash' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(47) : error C2065: 'CryptCreateHash' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(47) : error C2065: 'algId' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(53) : error C2065: 'CryptReleaseContext' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(61) : error C2065: 'CryptHashData' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(67) : error C2065: 'CryptDestroyHash' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(81) : error C2065: 'CryptGetHashParam' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(81) : error C2065: 'HP_HASHSIZE' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(89) : error C2065: 'HP_HASHVAL' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(93) : error C2065: 'pszHash' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(133) : error C2065: 'CALG_MD5' : undeclared identifier
d:\vc++projects\ceshi\ceshi.cpp(135) : error C2664: 'MessageBoxA' : cannot convert parameter 3 from 'unsigned short [4]' to 'const char *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.
#include <stdlib.h>
#include <iostream>
#include <windows.h>
#include <tchar.h>
#include <WinCrypt.h>
using namespace std;
// 计算Hash,成功返回,失败返回GetLastError()
// CONST BYTE *pbData, // 输入数据
// DWORD dwDataLen, // 输入数据字节长度
// ALG_ID algId // Hash 算法, 详见MSDN:CryptCreateHash
// LPTSTR pszHash, // 输出进制Hash字符串,MD5长度为+1, SHA长度为+1
//
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 (dwReturn = GetLastError());
HCRYPTHASH hHash;
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, _T("%02X"), pHash[i]);
lstrcat(pszHash, szTemp);
}
delete [] pHash;
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
return dwReturn;
}
int HashTest()
{
char szStr[20] = {0};
TCHAR szHash[100] = {0};
strcpy(szStr,"MD5");
GetHash((BYTE*)szStr, strlen(szStr), CALG_MD5,szHash);
MessageBox(NULL, szHash, L"MD5", MB_OK);
}
void main()
{
HashTest();
getchar();
}