Linux下c基於openssl生成MD5的函數


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的函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM