MD2
MD4
MD5
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/md2.h>
#include <openssl/md4.h>
#include <openssl/md5.h>
#include <openssl/crypto.h>
static char *s1 = "abc";
static int s1_len = 3;
char *ret_md2 = "da853b0d3f88d99b30283a69e6ded6bb";
char *ret_md4 = "a448017aaf21d8525fc10ae87aa6729d";
char *ret_md5 = "900150983cd24fb0d6963f7d28e17f72";
static char *pt(unsigned char *md, int len)
{
int i;
static char buf[256];
for (i = 0; i < len; i++)
sprintf(&(buf[i * 2]), "%02x", md[i]);
return (buf);
}
void md2(void)
{
MD2_CTX c;
unsigned char md[MD2_DIGEST_LENGTH];
char *p;
MD2((unsigned char *)s1, s1_len, md);
p = pt(md, MD2_DIGEST_LENGTH);
printf("MD2 : %s\n", p);
MD2_Init(&c);
MD2_Update(&c, (unsigned char *)s1, s1_len);
MD2_Final(md, &c);
OPENSSL_cleanse(&c, sizeof(c));
p = pt(md, MD2_DIGEST_LENGTH);
printf("MD2 : %s\n", p);
}
void md4(void)
{
MD4_CTX c;
unsigned char md[MD4_DIGEST_LENGTH];
char *p;
MD4((unsigned char *)s1, s1_len, md);
p = pt(md, MD4_DIGEST_LENGTH);
printf("MD4 : %s\n", p);
MD4_Init(&c);
MD4_Update(&c, (unsigned char *)s1, s1_len);
MD4_Final(md, &c);
OPENSSL_cleanse(&c, sizeof(c));
p = pt(md, MD4_DIGEST_LENGTH);
printf("MD4 : %s\n", p);
}
void md5(void)
{
MD5_CTX c;
unsigned char md[MD5_DIGEST_LENGTH];
char *p;
MD5((unsigned char *)s1, s1_len, md);
p = pt(md, MD5_DIGEST_LENGTH);
printf("MD5 : %s\n", p);
MD5_Init(&c);
MD5_Update(&c, (unsigned char *)s1, s1_len);
MD5_Final(md, &c);
OPENSSL_cleanse(&c, sizeof(c));
p = pt(md, MD5_DIGEST_LENGTH);
printf("MD5 : %s\n", p);
}
int main(int argc, char *argv[])
{
if (argc > 1) {
s1 = argv[1];
}
s1_len = strlen(s1);
printf("calculating MD* on '%s'\n", s1);
md2();
md4();
md5();
return 0;
}
运行结果
$ gcc -Wall -lcrypto md.c
$ ./a.out
calculating MD* on 'abc'
MD2 : da853b0d3f88d99b30283a69e6ded6bb
MD2 : da853b0d3f88d99b30283a69e6ded6bb
MD4 : a448017aaf21d8525fc10ae87aa6729d
MD4 : a448017aaf21d8525fc10ae87aa6729d
MD5 : 900150983cd24fb0d6963f7d28e17f72
MD5 : 900150983cd24fb0d6963f7d28e17f72
$ ./a.out 123
calculating MD* on '123'
MD2 : ef1fedf5d32ead6b7aaf687de4ed1b71
MD2 : ef1fedf5d32ead6b7aaf687de4ed1b71
MD4 : c58cda49f00748a3bc0fcfa511d516cb
MD4 : c58cda49f00748a3bc0fcfa511d516cb
MD5 : 202cb962ac59075b964b07152d234b70
MD5 : 202cb962ac59075b964b07152d234b70