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命令进行验证。
 
 
 
 文章为转载,略微改了几个字眼。