首页
社区
课程
招聘
[求助]寻找MD5对字符数组加密的算法
发表于: 2009-3-20 22:18 6410

[求助]寻找MD5对字符数组加密的算法

2009-3-20 22:18
6410
有人有MD5对字符数组加密的算法吗?请注意是对字符数组,不是对字符串!

网上找了好半天,没一个能用的,天下文章一大抄,都是抄来的,要么就是加密的结果不对,没办法了,来这里求助。

谢了先

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
急啊,
2009-3-20 22:28
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
网上有对字符串加密的,你稍微改改不就能用了嘛
2009-3-20 22:45
0
雪    币: 424
活跃值: (1969)
能力值: ( 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; 
}   
2009-3-20 22:46
0
雪    币: 94
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
看看这个
http://bbs.pediy.com/showthread.php?t=84136
2009-3-21 08:55
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
呵呵,改了,都不行。

谢谢楼上兄弟们啦,我试试。
2009-3-21 09:42
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
StarsunYzL 兄弟的结果和我原来程序是一样,很奇怪;可就是和那个软件的结果不一样,同样的代码,那软件的字符串的md5结果和我的程序是一样的,可字符数组却不一样。。。

算了,我抠汇编吧。

再次谢谢大家!结贴。
2009-3-21 09:56
0
游客
登录 | 注册 方可回帖
返回
//