您的位置:首页 > 运维架构 > Linux

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

2015-08-25 21:59 561 查看
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的函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: