Linux下openssl提供了一系列哈希及加密的函数,如果调用openssl提供的MD5函数生成任意字符串的MD5呢?下面提供了一段代码实现Linux下c字符串生成md5的函数。
具体代码:
- #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;
- }
另外提供两段代码供参考:
方法一:
- #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
方法二:
- #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
来源: http://www.phpxs.com/code/1004344/