標籤:
Linux下openssl提供了一系列雜湊及加密的函數,如果調用openssl提供的MD5函數產生任一字元串的MD5呢?下面提供了一段代碼實現Linux下c字串產生md5的函數。
具體代碼:
| 123456789101112131415161718192021222324252627282930 |
#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搜集整理
另外提供兩段代碼供參考:
方法一:
| 123456789101112131415161718192021 |
#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
方法二:
| 1234567891011121314151617 |
#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的函數
Linux下c基於openssl產生MD5的函數