来源于: http://www.fzitshow.com/redirect.php?tid=11971&goto=lastpost
#include <string.h>
#include <stdlib.h>
#include <openssl/md5.h>
// 函数原型;
// void MD5_Init(MD5_CTX *c);
// void MD5_Update(MD5_CTX *c, const void *data, unsigned long len);
// void MD5_Final(unsigned char *md, MD5_CTX *c);
int main(int argc, char *argv[])
{
char password[128] = {0};
MD5_CTX x;
int i = 0, len;
char *out = NULL;
unsigned char d[16];
unsigned char tmp[128] = { 0 };
if (argc != 2) {
printf("Usage: %s <message>/n", argv[0]);
return -1;
}
strcpy(password, argv[1]);
MD5_Init(&x);
MD5_Update(&x, (char *)password, strlen(password));
MD5_Final(d, &x);
out = (char *)malloc(35);
memset(out, 0x00, 35);
strcpy(out, "$1$");
printf("MD5(/"%s/") = ", password);
for (i = 0; i < 16; i++) {
sprintf(out + (i*2), "%02X", d[i]); // 转换为32位
}
out[32] = 0;
printf("%s/n", out);
return 0;
}
//编译的时候得调用 libcrypt.so : /usr/lib/libcrypt.so
gcc -o md5 md5.c -lcrypto
//执行:
./md5 123
//可能的结果: 202CB962AC59075B964B07152D234B70