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