通过网上一个MD5加密算法源码生成DLL
一、建立DLL项目并编译
DEVC++创建C项目,选择DLL,
一共4个文件及源码如下:
dll.h
dllmain.c
md5.c
md5.h
函数参数:
char * getMD5 (unsigned char *s);
dll.h:
#ifndef _DLL_H_ #define _DLL_H_ #if BUILDING_DLL # define DLLIMPORT __declspec (dllexport) #else /* Not BUILDING_DLL */ # define DLLIMPORT __declspec (dllimport) #endif /* Not BUILDING_DLL */ //DLLIMPORT void HelloWorld (void); DLLIMPORT char * getMD5 (unsigned char *s); #endif /* _DLL_H_ */
dllmain.c:
/* Replace "dll.h" with the name of your header */ #include "dll.h" #include <windows.h> #include <stdio.h> #include <stdlib.h> #include "md5.h" DLLIMPORT char * getMD5 (unsigned char *encrypt) { int i; char output[32+1]; char temp[3]; memset(output,0,33); unsigned char decrypt[16]; MD5_CTX md5; MD5Init(&md5); MD5Update(&md5,encrypt,strlen((char *)encrypt)); MD5Final(&md5,decrypt); // printf("加密前:%s\n加密后:",encrypt); for(i=0;i<16;i++) { sprintf(temp,"%02x",decrypt[i]); strcat(output,temp); } return output; } BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ , DWORD reason /* Reason this function is being called. */ , LPVOID reserved /* Not used. */ ) { switch (reason) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } /* Returns TRUE on success, FALSE on failure */ return TRUE; }
md5.c:
#include <memory.h> #include "md5.h" unsigned char PADDING[]={ 0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};