使用windows的動態連結程式庫advapi32.dll.
此動態連結程式庫提供以下md5函數:
MD5Init(&ctx);
MD5Update(&ctx, buf, len);
MD5Final(&ctx);
具體使用如下
建立檔案 common.h
#include <windows.h>/* 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<const unsigned char *>(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];