http://blog.csdn.net/cassie_huang/article/details/53212933
作者:无脑仔的小明
出处:http://www.cnblogs.com/wunaozai/
我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Linux下可以使用命令md5sum filename.txt计算md5值 ==> b1946ac92492d2347c6235b4d2611184 。虽然写入的是hello这5个字符,但是我们使用命令xxd filename.txt后可以看出文件结尾处会有个0x0a这个回车符。所以在下面的代码中才会有\n。
-
-
- int MD5_Init(MD5_CTX *c);
-
- int MD5_Update(MD5_CTX *c, const void *data, size_t len);
-
- int MD5_Final(unsigned char *md, MD5_CTX *c);
-
- unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md);
-
- void MD5_Transform(MD5_CTX *c, const unsigned char *b);
新建一个cpp文件(C文件也可以)用于计算MD5值
- #include <openssl/md5.h>
- #include <string.h>
- #include <stdio.h>
-
- int main()
- {
- MD5_CTX ctx;
- unsigned char outmd[16];
- int i=0;
-
- memset(outmd,0,sizeof(outmd));
- MD5_Init(&ctx);
- MD5_Update(&ctx,"hel",3);
- MD5_Update(&ctx,"lo\n",3);
- MD5_Final(outmd,&ctx);
- for(i=0;i<16;i<i++)
- {
- printf("%02X",outmd[i]);
- }
- printf("\n");
- return 0;
- }
编译选项为: g++ MD5test.cpp -lssl -o MD5test(如果是C语言可以使用gcc MD5test.c -o MD5test)
运行后的结果为: B1946AC92492D2347C6235B4D2611184
注意这里用到openssl库,可以自行根据网上教程安装。
下面这个代码是对文件进行MD5计算。
- #include <openssl/md5.h>
- #include <string.h>
- #include <stdio.h>
-
- int main()
- {
- MD5_CTX ctx;
- unsigned char outmd[16];
- char buffer[1024];
- char filename[32];
- int len=0;
- int i;
- FILE * fp=NULL;
- memset(outmd,0,sizeof(outmd));
- memset(filename,0,sizeof(filename));
- memset(buffer,0,sizeof(buffer));
- printf("请输入文件名,用于计算MD5值:");
- scanf("%s",filename);
- fp=fopen(filename,"rb");
- if(fp==NULL)
- {
- printf("Can't open file\n");
- return 0;
- }
-
- 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<16;i<i++)
- {
- printf("%02X",outmd[i]);
- }
- printf("\n");
- return 0;
- }
运行得到结果后,我们可以使用md5sum命令进行验证。
文章为转载,略微改了几个字眼。