http://blog.csdn.net/sinat_35297665/article/details/78244523
 
 
 在linux机器上,有一个命令可以计算出文件的md5值,那就是md5sum,如果没有的话,就需要安装RPM包:coreutils。
 
 现在我们使用openssl的库也可以方便的计算出文件的md5值。主要用到的函数是
 
 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);
 
 
 使用库前,先需要安装openssl的RPM包。这三个函数不需要解释,看下面一个例子就知道:
 
 
 
  -  #include <openssl/md5.h>  
-  #include <iostream>  
-  #include <cstdio>  
-  #include <iomanip>  
-  #include <stdlib.h>  
-  using namespace std;  
-    
-    
-  int main()  
-  {  
-          FILE *fd=fopen("test","r");  
-          MD5_CTX c;  
-          unsigned char md5[17]={0};  
-          if(fd == NULL)  
-          {  
-                  cout << "open failed" << endl;  
-                  return -1;  
-          }  
-          int len;  
-          unsigned char *pData = (unsigned char*)malloc(1024*1024*1024);  
-          if(!pData)  
-          {  
-                  cout << "malloc failed" << endl;  
-                  return -1;  
-          }  
-          MD5_Init(&c);  
-          while( 0 != (len = fread(pData, 1, 1024*1024*1024, fd) ) )  
-          {  
-                  MD5_Update(&c, pData, len);  
-          }  
-          MD5_Final(md5,&c);  
-          for(int i = 0; i < 16; i++)  
-                  cout << hex << setw(2) << setfill('0') << (int)md5[i];  
-          cout << endl;  
-          fclose(fd);  
-          free(pData);  
-          return 0;  
-  }  
  
 
 
 
 
 
 
 
编译链接选项为:
 
 
 
 g++ test.cpp -o testmd5 -lcrypto -lssl
 
 
 生成testmd5后,我们把一个300多M的test文件放到与testmd5一个目录。并把testmd5生成的结果和linux命令"md5sum test" 结果对比,会发现是一样的。如下图:
 
 
 
 
 
 
 
 有兴趣可以参考openssl源码