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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。