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