求32位MD5加密类

zy2015036 2010-03-15 11:36:15
我需要一个MD5加密字符串的类.
谢谢了.
...全文
170 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jingzhongrong 2010-03-15
  • 打赏
  • 举报
回复
头文件有添加吗?
zy2015036 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jingzhongrong 的回复:]
CryptoAPI:


C/C++ code
#include <stdlib.h>

#include <iostream>

#include <windows.h>

#include <tchar.h>

#include <WinCrypt.h>



using namespace std;



// 计算Hash,成功返回,失败返回Ge……
[/Quote]
请问一下,这个是咋用的?我建立了控制台应用程序无法使用.
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.
jingzhongrong 2010-03-15
  • 打赏
  • 举报
回复
CryptoAPI:

#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();

}

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧