Linux环境下使用openssl库的MD5进行数据加密

openssl库中的md5加密工具可以将输入字符串加密后输出16字节数。

测试代码如下:

 1 // test_md5.c
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <unistd.h>
 5 #include <openssl/md5.h>
 6 
 7 int md5_test(void *idata, size_t len, unsigned char *md5)
 8 {
 9     MD5_CTX ctx;
10 
11     if (idata == NULL || len <= 0 || md5 == NULL) {
12         printf("Input param invalid!\n");
13         return -1;
14     }
15 
16     memset(&ctx, 0, sizeof(ctx));
17     MD5_Init(&ctx);
18     MD5_Update(&ctx, idata, len);
19     MD5_Final(md5, &ctx);
20 
21     return 0;
22 }
23 
24 void md5_test1(void)
25 {
26     const char *input_data = "My name is hancq";
27     unsigned char md5[16];
28     int i;
29 
30     md5_test(input_data, 16, md5);
31     printf("md5_test1:");
32     for (i = 0; i < 16; i++) {
33         printf("%02x", md5[i]);
34     }
35     printf("\n");
36 }
37 
38 void md5_test2(void)
39 {
40     const char *input_data = "My name is hancq";
41     unsigned char md5[16];
42     int i;
43 
44     MD5(input_data, 16, md5);
45     printf("md5_test2:");
46     for (i = 0; i < 16; i++) {
47         printf("%02x", md5[i]);
48     }
49     printf("\n");
50 }
51 
52 int main(int argc, char **argv)
53 {
54     md5_test1();
55     md5_test2();
56 
57     return 0;
58 }

编译时需要连接crypto库:

gcc test_md5.c -o test -lcrypto

可以使用linux下的md5sum命令进行数据加密结果验证:

echo -n "My name is hancq" | md5sum