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
typedef void(WINAPI* PMD5Init)(MD5_CTX *);
typedef void(WINAPI* PMD5Update)(MD5_CTX *, const unsigned char *,
unsigned int);
typedef void(WINAPI* PMD5Final)(MD5_CTX *);
BOOL CalcMd5(unsigned char * data, unsigned int len, char *digest)
{
MD5_CTX ctx;
HMODULE hDLL;
BOOL ret = FALSE;
SecureZeroMemory(digest, MD5DIGESTLEN);
hDLL = LoadLibraryA("advapi32.dll");
if (hDLL) {
PMD5Init MD5Init = (PMD5Init)GetProcAddress(hDLL, "MD5Init");
PMD5Update MD5Update = (PMD5Update)GetProcAddress(hDLL, "MD5Update");
PMD5Final MD5Final = (PMD5Final)GetProcAddress(hDLL, "MD5Final");
if (MD5Init && MD5Update && MD5Final) {
MD5Init(&ctx);
MD5Update(&ctx, data, len);
MD5Final(&ctx);
memcpy(digest, ctx.digest, MD5DIGESTLEN);
ret = TRUE;
}
FreeLibrary(hDLL);
}
return ret;
}
Windows API 计算MD5
由
·
发表回复