Linux下调用openssl的md5类生成文件和字符串md5
找个能使用的c++调用openssl的代码都这么难,自己写了个,记录下。
以下代码在centos5下测试可用。
view sourceprint?01 //============================================================================
02 // Name : m d 5.cpp
03 // Author : Neeao
04 // Version :
05 // Copyright : http://Neeao.com
06 //============================================================================
07
08 #include <iostream>
09 #include <openssl/<A onclick="tagshow(md5);return false;" href="md5.h>http://neeao.com/tag/md5/">md5</A>.h>
10 #include <fstream>
11
12 using namespace std;
13 /**
14 * 字符串md5
15 */
16 string string_md5(string str)
17 {
18 unsigned char md[16];
19 char tmp[33]={};
20 string hash="";
21 MD5((const unsigned char*)str.c_str(), str.size(), md);
22 for(int i=0; i<16; i++){
23 sprintf(tmp, "%02X", md[i]);
24 hash+=(string)tmp;
25 }
26 return hash;
27 }
28 /**
29 * 文件 md5
30 */
31 string file_md5(string file_name)
32 {
33 MD5_CTX md5;
34 unsigned char md[16];
35 char tmp[33]={};
36 int length,i;
37 char buffer[1024];
38 string hash="";
39 MD5_Init(&md5);
40 ifstream fin(file_name.c_str(),ios::in|ios::binary);
41 while(!fin.eof())
42 {
43 fin.read(buffer, 1024);
44 length = fin.gcount();
45 if (length > 0) {
46 MD5_Update(&md5,buffer, length);
47 }
48 }
49 MD5_Final(md,&md5);
50 for(i=0; i<16; i++){
51 sprintf(tmp, "%02X", md[i]);
52 hash+=(string)tmp;
53 }
54 return hash;
55 }
56 int main() {
57 string file_name = "/root/install.log";
58 cout<<file_md5(file_name)<<endl;
59 cout<<string_md5(file_name)<<endl;
60 return 0;
61 }
补充:综合编程 , 安全编程 ,