Linux下c基于openssl生成MD5的函数

时间:2024-01-03 12:36:32

Linux下openssl提供了一系列哈希及加密的函数,如果调用openssl提供的MD5函数生成任意字符串的MD5呢?下面提供了一段代码实现Linux下c字符串生成md5的函数。

具体代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "stdio.h"
#include <string.h>
#include <stdlib.h>
#include <openssl/md5.h>
int  get_md5( char  *input, char  *output)
{
     char  password[1024*1024*5]={0};
     MD5_CTX x;
     int  i = 0, len;
     char  *out = NULL;
     unsigned  char  d[16];
     unsigned  char  tmp[128] = { 0 }; 
     strcpy (password,input);
     MD5_Init(&x);
     MD5_Update(&x, ( char  *)password,  strlen (password));
     MD5_Final(d, &x);
     out = ( char  *) malloc (35);
     memset (out, 0x00, 35);
     strcpy (out,  "$1$" );
    // printf("MD5(\"%s\") = ", password);
     for  (i = 0; i < 16; i++)
     {
         sprintf (out + (i*2),  "%02X" , d[i]);  // 转换为32位
     }
     out[32] = 0;
    // printf("%s\n", out);
     strcpy (output,out);
     free (out);
     return  0;
}

本文由www.169it.com搜集整理

另外提供两段代码供参考:

方法一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
#include<openssl/md5.h>
#include<string.h>
int  main(  int  argc,  char  **argv )
{
MD5_CTX ctx;
unsigned  char  *data= "123" ;
unsigned  char  md[16];
char  buf[33]={ '\0' };
char  tmp[3]={ '\0' };
int  i;
MD5_Init(&ctx);
MD5_Update(&ctx,data, strlen (data));
MD5_Final(md,&ctx);
for ( i=0; i<16; i++ ){
sprintf (tmp, "%02X" ,md[i]);
strcat (buf,tmp);
}
printf ( "%s\n" ,buf);
return  0;
}

输出:

202CB962AC59075B964B07152D234B70

方法二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
#include<openssl/md5.h>
#include<string.h>
int  main(  int  argc,  char  **argv )
{
unsigned  char  *data =  "123" ;
unsigned  char  md[16];
int  i;
char  tmp[3]={ '\0' },buf[33]={ '\0' };
MD5(data, strlen (data),md);
for  (i = 0; i < 16; i++){
sprintf (tmp, "%2.2x" ,md[i]);
strcat (buf,tmp);
}
printf ( "%s\n" ,buf);
return  0;
}

输出:

202cb962ac59075b964b07152d234b70

文章来源:Linux下c基于openssl生成MD5的函数