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源碼