不过,在 2004 年 8 月,当时在山大的王小云教授及其合作者发现了 MD5 的 弱点。迄今为止,SHA-0, SHA-1, MD4, MD5, HAVAL-128 和 RIPEMD 等加密算法都被证明存在弱点。
这里是一个 MD5 数据库,可以进行双向查询。
看到一个有意思的 说法:
"人生就是个MD5算法,它不可逆,而每个人也都是一个自变量,因此每个人的MD5值都不一样。目前MD5可以解密了,想要解密人生,也不是不可以。"
来点实在的,在 Linux 调用 openssl 的 libcrypto.so* 库加密字符串:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/md5.h>
int main(int argc, char *argv[])
{
char password[68] = {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 = 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]);
}
out[32] = 0;
printf ("%s\n", out);
return 0;
}
gcc -Wall -o md5 md5.c -lcrypto
char password[68] 呵呵,有长度限制呀^_^
ReplyDeletesirtoozee, 这只是一个例程,记录一下怎么调用 openssl 进行 md5 加密。
ReplyDelete