在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 #include #include #include using namespace std;
int main()
; if(fd == null)
int len;
unsigned char *pdata = (unsigned char*)malloc(1024*1024*1024);
if(!pdata)
md5_init(&c);
while( 0 != (len = fread(pdata, 1, 1024*1024*1024, fd) ) )
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 tes***5 -lcrypto -lssl
生成tes***5後,我們把乙個300多m的test檔案放到與tes***5乙個目錄。並把tes***5生成的結果和linux命令"md5sum test" 結果對比,會發現是一樣的。
int getfilemd5(std::string strfile, std::string& strmd5)
if (stfileinfo.st_size < nbuffersize)
// open file
file *fp = fopen(strfile.c_str(), "r");
if(fd == null)
unsigned char *pdatabuffer = (unsigned char*)malloc(nbuffersize);
if(null == pdatabuffer)
// get md5
md5_init(&ctx);
while(true)
md5_update(&ctx, pdatabuffer, nlen);
} md5_final(szmd5, &ctx);
// md5 to string
strmd5 = "";
for(int i = 0; i < 16; i++)
fclose(fp);
if(null != pdatabuffer)
return 0;
}
使用openssl的md5庫
在linux機器上,有乙個命令可以計算出檔案的md5值,那就是md5sum,如果沒有的話,就需要安裝rpm包 coreutils。現在我們使用openssl的庫也可以方便的計算出檔案的md5值。主要用到的函式是 int md5 init md5 ctx c int md5 update md5 ct...
md5 加密(使用openssl庫C)
參考 依賴openssl裡面的 lcrypto libcrypto.so庫 include unsigned char md5 const unsigned char d,unsigned long n,unsigned char md int md5 init md5 ctx c int md5 ...
Md5使用詳解
b 以二進位制模式讀入檔案內容 t 以文字模式讀入檔案內容 c 根據已生成的md5值,對現存盤案進行校驗 md5sum file root master lianxi md5sum data 0a6de444981b68d6a049053296491e49 data root master lian...