C语言调用OpenSSL的md5计算方式
方式1
#include <openssl/md5.h>
#include <stdio.h>
#include <string.h>
void md5hexToString(unsigned char *md,char *result){
// char tmp[3];
for (size_t i = 0; i <= 15; i++){
sprintf(result+i*2,"%02x",md[i]);
}
return;
}
int main(int argc, char const *argv[])
{
//存储md5的hex结果
unsigned char md[16] = {0};
//存储hex对应的字符串结果
char result[33] = {0};
MD5("helloworld",10,md);
md5hexToString(md,result);
printf("%s",result);
return 0;
}
- 相较于第二种方式 只需要执行一次MD5()函数即可 也不需要声明MD5_CTX变量
方式2
#include <openssl/md5.h>
#include <stdio.h>
#include <string.h>
void md5hexToString(unsigned char *md,char *result){
// char tmp[3];
for (size_t i = 0; i <= 15; i++){
sprintf(result+i*2,"%02x",md[i]);
}
return;
}
int main(int argc, char const *argv[])
{
//存储md5的hex结果
unsigned char md[16] = {0};
//存储hex对应的字符串结果
char result[33] = {0};
MD5_CTX c;
MD5_Init(&c);
//这个方式你可以多次执行Update函数
MD5_Update(&c,"helloworld1",10);
MD5_Update(&c,"helloworld2",10);
MD5_Final(md,&c);
md5hexToString(md,result);
printf("%s",result);
return 0;
}
- 这种方式相较于第一种的好处在于 可以多次执行MD5_Update函数更新md5的值。对于大文件来说 不必一次性分配过多内存
编译的时候 需要加上-lcrypto:
gcc md5.c -lcrypto -o md5