参考:https://www.cnblogs.com/liuzhipenglove/p/6811358.html
参考:http://blog.csdn.net/fengbingchun/article/details/42978603
参考:http://blog.csdn.net/dgyanyong/article/details/21415961
参考:https://www.cnblogs.com/chars/p/4983291.html
参考:http://www.bubuko.com/infodetail-226478.html
参考:http://d.download.csdn.net/download/tc_hmily/2249000
参考:http://blog.csdn.net/zhangxuechao_/article/details/73128790
参考:http://www.linuxidc.com/Linux/2014-08/105204.htm
#include <stdio.h>
#include <string.h>
#include <openssl/md5.h>
/*
// 初始化 MD5 Contex, 成功返回1,失败返回0
int MD5_Init(MD5_CTX *c);
// 循环调用此函数,可以将不同的数据加在一起计算MD5,成功返回1,失败返回0
int MD5_Update(MD5_CTX *c, const void *data, size_t len);
// 输出MD5结果数据,成功返回1,失败返回0
int MD5_Final(unsigned char *md, MD5_CTX *c);
// MD5_Init,MD5_Update,MD5_Final三个函数的组合,直接计算出MD5的值
unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md);
*/
//gcc main.c -lcrypto
int main(void)
{
MD5_CTX ctx;
unsigned char outmd[17] = {'\0'};
int i = 0;
memset(outmd,0x00,sizeof(outmd));
MD5_Init(&ctx);//初始化MD5 Contex成功1,失败0
MD5_Update(&ctx,"hel",3);//循环调用此函数,可以将不同的"字节数据"加在一起计算MD5,成功1失败0
MD5_Update(&ctx,"lo\n",3);//循环
MD5_Final(outmd,&ctx);//输出MD5结果数据,成功1失败0
for(i = 0;i < strlen(outmd);++i)
{
printf("%02x",outmd[i]);
}
printf("\n");
unsigned char outmd2[17] = {'\0'};
MD5("hello world",strlen("hello world"),outmd2);
for(i = 0;i<strlen(outmd2);++i)
{
printf("%02x",outmd2[i]);
}
return 0;
}
#include <stdio.h>
#include <string.h>
#include <openssl/md5.h>
int main(void)
{
MD5_CTX ctx;
unsigned char outmd[17] = {'\0'};
char buffer[1024] = {'\0'};
char filename[32] = {'\0'};
int len = 0;
int i = 0;
FILE *fp = NULL;
memset(outmd,0x00,sizeof(outmd));
memset(filename,0,sizeof(filename));
memset(buffer,0,sizeof(buffer));
printf("请输入文件名,用于计算MD5值:");
scanf("%s",filename);
fp = fopen(filename,"rb");
MD5_Init(&ctx);
while((len = fread(buffer,1,1024,fp))>0)
{
MD5_Update(&ctx,buffer,len);
memset(buffer,0,sizeof(buffer));
}
MD5_Final(outmd,&ctx);
for(i = 0;i<strlen(outmd);++i)
{
printf("%02x",outmd[i]);
}
printf("\n");
return 0;
}