Linux下openssl提供了一系列哈希及加密的函數,若是調用openssl提供的MD5函數生成任意字符串的MD5呢?下面提供了一段代碼實現Linux下c字符串生成md5的函數。html
具體代碼:函數
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蒐集整理加密
另外提供兩段代碼供參考:spa
方法一:code
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;
}
|
輸出:orm
202CB962AC59075B964B07152D234B70htm
方法二:md5
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;
}
|
輸出:ssl
202cb962ac59075b964b07152d234b70ci