#include #include int get_md5( char *">
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx

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

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

具体代码:

 #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;  } 

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

方法一:

 #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


方法二:

 #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