Basic Hash and RSA algorithms are implemented in Win2000 / XP Advapi32.dll, but Microsoft does not give a definition of functions and data.
The call to the MD5 algorithm will be demonstrated.
#include
/ * Data Structure for MD5 (Message-Digest) computation * / typef 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 *));
PMD5init md5init = null; pmd5update md5Update = null; pmd5final md5Final = null;
Const char * hex2asc (const byte * hex, int LEN) {static char ASC [4096 * 2]; INT i; for (i = 0; i
INT main () {md5_ctx ctx; unsigned char buf [4] = "1233"; Hinstance HDLL;
if ((hDLL = LoadLibrary ( "advapi32.dll"))> 0) {MD5Init = (PMD5Init) GetProcAddress (hDLL, "MD5Init"); MD5Update = (PMD5Update) GetProcAddress (hDLL, "MD5Update"); MD5Final = (PMD5Final GetProcAddress (HDLL, "MD5Final");
Md5init (& CTX); MD5UPDATE (& CTX, BUF, 4); MD5Final (& CTX);
Printf (HEX2ASC (CTX.Digest, 16);
} Return 0;}
Is it very simple? In addition, there are other algorithms such as RSA, DSA, SHA, etc. in Advapi32.dll, and the above code is debugged under WinXP SP1 / VC6.0.