#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/md5.h>
char *str2md5(const char *str, int length)
{
int n;
MD5_CTX c;
unsigned char digest[16];
char *out = (char*)malloc(33);
MD5_Init(&c);
while (length > 0)
{
if (length > 512)
{
MD5_Update(&c, str, 512);
} else
{
MD5_Update(&c, str, length);
}
length -= 512;
str += 512;
}
MD5_Final(digest, &c);
for (n = 0; n < 16; ++n) {
snprintf(&(out[n*2]), 16*2, "%02x", (unsigned int)digest[n]);
}
return out;
}
int main(void)
{
char *output = str2md5("vovo2000.com", strlen("vovo2000.com"));
printf("%s\n", output);
free(output);
return 0;
}
$ gcc md5.c
md5.c:(.text+0x40): undefined reference to `MD5_Init'
md5.c:(.text+0x6c): undefined reference to `MD5_Update'
md5.c:(.text+0x90): undefined reference to `MD5_Update'
md5.c:(.text+0xc4): undefined reference to `MD5_Final'
collect2: ld returned 1 exit status
$ gcc md5.c -l ssl -l crypto
$ a.out