1 / 3
文档名称:

VC中实现哈希Hash算法.pdf

格式:pdf   页数:3
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

VC中实现哈希Hash算法.pdf

上传人:紫岑旖旎 2012/9/16 文件大小:0 KB

下载得到文件列表

VC中实现哈希Hash算法.pdf

文档介绍

文档介绍:踏雪无痕
VC中实现哈希Hash算法
分类: 技术摘录 2012-03-23 08:04 238人阅读评论(0) 收藏举报
    Hash函数我们可以自己用C来编写,但是如果在VC中就不必了,因为在VC中有实现hash算法的函数可以调用,
就是CryptAcquireContext函数,。下面是我在MFC中实现
的,因为想要结果输出到messagebox中,所以就在视类里定义和实现了GetHash函数来计算哈
希值。
首先是在View类的头文件中包含下列文件和内容:
#define _WIN32_WINNT 0x0400
#include <>
#include <>

然后我们在View类中定义GetHash函数,函数类型为DWORD类型,参数为:
GetHash(BYTE *pbData, DWORD dwDataLen, ALG_ID algId, LPTSTR pszHash)
先看一下这个函数几个参数的意义吧.
 // 计算Hash,成功返回0,失败返回GetLastError()
//  CONST BYTE *pbData, // 输入数据
//  DWORD dwDataLen,     // 输入数据字节长度
//  ALG_ID algId       // Hash 算法:CALG_MD5,CALG_SHA
//  LPTSTR pszHash,  // 输出16进制Hash字符串,MD5长度为32+1, SHA长度为40+1
    然后我们在View类中完成对GetHash函数的定义,如下:
DWORD CHash_testView::GetHash(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;
  //Alg Id:CALG_MD5,CALG_SHA
  if(!CryptCreateHash(hProv, algId, 0, 0, &hHash))
  {
    dwReturn = GetLastError();
    CryptReleaseContext(hProv, 0);
    return dwReturn;
  }
 
  if(!CryptHashData(hHash, pbData, dwDataLen, 0))
  {
    dwReturn = GetLastError();
    CryptDestroyHash(hHash);
1
CryptDestroyHash(