16,548
社区成员




CString CFileEncryptorDlg::SHA1(CString &inData)
{
CString outData;
HCRYPTPROV hProv = 0;
HCRYPTHASH hHash = 0;
BYTE bHash[32];
DWORD dwHashLen = 20; // The SHA1 algorithm always returns 20 bytes.
DWORD cbContent = inData.GetLength();
BYTE* pbContent = (BYTE*)inData.GetBuffer(cbContent);//这里老是说错误的指针,不知道是不是错了
if(!CryptAcquireContext(&hProv, NULL,MS_DEF_PROV,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT))
return _T("");
if(!CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash))
return _T("");
if(!CryptHashData(hHash, pbContent, cbContent, 0))
return _T("");
if(!CryptGetHashParam(hHash, HP_HASHVAL, bHash, &dwHashLen, 0))
return _T("");
CString tmp;
for (unsigned int i = 0; i < dwHashLen; i += 4) {
tmp.Format(_T("%02x%02x%02x%02x"), bHash[i], bHash[i+1],bHash[i+2],bHash[i+3]);
outData += tmp;
}
if(hHash)
CryptDestroyHash(hHash);
if(hProv)
CryptReleaseContext(hProv, 0);
return outData;
}
CString m_strTime;
CTime time = CTime::GetCurrentTime(); ///构造CTime对象
m_strTime = time.Format("%Y%m%d%H%M%S");
SetDlgItemText(IDC_EDIT_HASH, SHA1(m_strTime));//显示给控件
DWORD cbContent = inData.GetLength() * sizeof(TCHAR);
BYTE *pbContent = (BYTE *)(LPCTSTR)inData;