能力值:
( LV2,RANK:10 )
|
-
-
2 楼
急啊,
|
能力值:
( LV9,RANK:610 )
|
-
-
3 楼
网上有对字符串加密的,你稍微改改不就能用了嘛
|
能力值:
( LV3,RANK:30 )
|
-
-
4 楼
Windows本身就有Crypto API可以实现MD5,给你个我写的,能用,“天下代码一大抄”,抄走吧
#include <windows.h>
#include <tchar.h>
//计算MD5,成功返回0,失败返回GetLastError()
DWORD MD5(__in_bcount(dwDataLen) const LPVOID pData, // 输入数据
__in DWORD dwDataLen, // 输入数据字节长度
__out LPTSTR pszMD5, // 输出字符串,TCHAR长度必须大于等于33
__in BOOL bCap = FALSE) // 是否输出为大写
{
DWORD dwReturn = 0;
HCRYPTPROV hProv;
if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
return (dwReturn = GetLastError());
HCRYPTHASH hHash;
if (!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash))
{
dwReturn = GetLastError();
CryptReleaseContext(hProv, 0);
return dwReturn;
}
if (!CryptHashData(hHash, static_cast<const BYTE*>(pData), dwDataLen, 0))
{
dwReturn = GetLastError();
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
return dwReturn;
}
DWORD dwSize;
DWORD dwLen = sizeof(dwSize);
CryptGetHashParam(hHash, HP_HASHSIZE, reinterpret_cast<BYTE*>(&dwSize), &dwLen, 0);
BYTE* pHash = new BYTE[dwSize];
dwLen = dwSize;
CryptGetHashParam(hHash, HP_HASHVAL, pHash, &dwLen, 0);
lstrcpy(pszMD5, _T(""));
TCHAR szTemp[3];
TCHAR *szFmt = bCap ? _T("%X%X") : _T("%x%x");
for (DWORD i = 0; i < dwLen; ++i)
{
wsprintf(szTemp, szFmt, pHash[i] >> 4, pHash[i] & 0xf);
lstrcat(pszMD5, szTemp);
}
delete [] pHash;
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
return dwReturn;
}
int _tmain(int argc, TCHAR *argv[])
{
TCHAR szMD5[33];
char szTest1[] = {'1', '2', '3'};
MD5(szTest1, sizeof(szTest1), szMD5, TRUE);
_tprintf(_T("%s\r\n"), szMD5);
char szTest2[] = {0x01, 0x02, 0x03};
MD5(szTest2, sizeof(szTest2), szMD5);
_tprintf(_T("%s\r\n"), szMD5);
system("pause");
return 0;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
看看这个
http://bbs.pediy.com/showthread.php?t=84136
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
呵呵,改了,都不行。
谢谢楼上兄弟们啦,我试试。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
StarsunYzL 兄弟的结果和我原来程序是一样,很奇怪;可就是和那个软件的结果不一样,同样的代码,那软件的字符串的md5结果和我的程序是一样的,可字符数组却不一样。。。
算了,我抠汇编吧。
再次谢谢大家!结贴。
|