使用windows的动态链接库advapi32.dll.
此动态链接库提供以下md5函数:
MD5Init(&ctx); MD5Update(&ctx, buf, len); MD5Final(&ctx);
具体使用如下
新建文件 common.h
-
#include -
/* Data structure for MD5 (Message-Digest) computation */ -
typedef struct { -
ULONG i[2]; /* number of _bits_ handled mod 2^64 */ -
ULONG buf[4]; /* scratch buffer */ -
unsigned char in[64]; /* input buffer */ -
unsigned char digest[16]; /* actual digest after MD5Final call */ -
} MD5_CTX; -
#define MD5DIGESTLEN 16 -
#define PROTO_LIST(list) list -
/* -
* MTS: Each of these assumes MD5_CTX is locked against simultaneous use. -
*/ -
typedef void (WINAPI* PMD5Init) PROTO_LIST ((MD5_CTX *)); -
typedef void (WINAPI* PMD5Update) PROTO_LIST ((MD5_CTX *, const unsigned char *, unsigned int)); -
typedef void (WINAPI* PMD5Final )PROTO_LIST ((MD5_CTX *)); -
//end globle define -
class Ccommon -
{ -
public: -
Ccommon(); -
virtual ~Ccommon(); -
const char * md5(const char * str); -
const char * Hex2ASC(const BYTE *Hex, int Len); -
PMD5Init MD5Init; -
PMD5Update MD5Update; -
PMD5Final MD5Final; -
};
新建文件 common.cpp
-
#include "stdafx.h" -
#include "common.h" -
// -
// Construction/Destruction -
// -
Ccommon::Ccommon() -
{ -
} -
Ccommon::~Ccommon() -
{ -
} -
const char * Ccommon::Hex2ASC(const BYTE *Hex, int Len) -
{ -
static char ASC[4096 * 2]; -
int i; -
for (i = 0; i < Len; i++) -
{ -
ASC[i * 2] = "0123456789abcdef"[Hex[i] >> 4]; -
ASC[i * 2 + 1] = "0123456789abcdef"[Hex[i] & 0x0F]; -
} -
ASC[i * 2] = 0; -
return ASC; -
} -
const char * Ccommon::md5(const char * str) -
{ -
MD5_CTX ctx; -
const unsigned char * buf = reinterpret_cast(str); -
int len = strlen(str); -
HINSTANCE hDLL; -
if ( (hDLL = LoadLibraryA("advapi32.dll")) > 0 ) -
{ -
MD5Init = (PMD5Init)GetProcAddress(hDLL,"MD5Init"); -
MD5Update = (PMD5Update)GetProcAddress(hDLL,"MD5Update"); -
MD5Final = (PMD5Final)GetProcAddress(hDLL,"MD5Final"); -
MD5Init(&ctx); -
MD5Update(&ctx, buf, len); -
MD5Final(&ctx); -
} -
return Hex2ASC(ctx.digest, 16); -
}
调用方法
-
//引入头文件 -
#include "common.h" -
//声明类 -
Ccommon md5Class; -
name=md5Class.md5(name);
注意事项
MD5加密后的大小写是由 Hex2ASC函数里
-
ASC[i * 2] = "0123456789abcdef"[Hex[i] >> 4]; -
ASC[i * 2 + 1] = "0123456789abcdef"[Hex[i] & 0x0F];
这两句代码控制的 这里我改为了小写 默认应该是大写 看大家需求而定
如果需要大写改为:
-
ASC[i * 2] = "0123456789ABCDEF"[Hex[i] >> 4]; -
ASC[i * 2 + 1] = "0123456789ABCDEF"[Hex[i] & 0x0F]; -
