VC++下使用md5函數

來源:互聯網
上載者:User

使用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];

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.