#include <stdlib.h>

#define _GNU_SOURCE /* for getline API */
#include <stdio.h> /* OpenSSL md5 API 头文件, 编译时需要连接 crypto 库(-lcrypto) */
#include <openssl/md5.h> /* ============ OpenSSL md5 API =================
*① 独立API, 一次性输入要计算的数据,然后得到md5值
* unsigned char *MD5(const unsigned char *src, unsigned long src_len, unsigned char *dst);
*
*② 系列API, 可以要计算的数据分多次输入,然后得到md5值
* int MD5_Init(MD5_CTX *ctx);
* int MD5_Update(MD5_CTX *ctx, const void *src, unsigned long src_len);
* int MD5_Final(unsigned char *dst, MD5_CTX *ctx);
*
* Note : API输出md5值的长度为 MD5_DIGEST_LENGTH(16个字节),
* 通常我们看到的md5sum等工具计算的md5值是32个字节,
* 这是因为 API输出的md5值是hex编码.
*
*/ #define md5_calc_data MD5 /* 计算文件的md5 */
unsigned char* md5_calc_file(const char* path, unsigned char *dst)
{
FILE* fp = NULL; char *line = NULL;
size_t len = ;
ssize_t read; MD5_CTX ctx; fp = fopen(path, "rb");
if (NULL == fp) {
return NULL;
} MD5_Init(&ctx); while ((read = getline(&line, &len, fp)) != -) {
MD5_Update(&ctx, line, read);
}
free(line);
MD5_Final(dst, &ctx); return dst;
} /* 将hex编码的MD5转换成字符串 */
char* md5_hex2str(unsigned char* in_md5_hex, char* out_md5_str)
{
int i = ; for (i = ; i < MD5_DIGEST_LENGTH; ++i) {
sprintf(out_md5_str + i * , "%.2x", in_md5_hex[i]);
}
out_md5_str[MD5_DIGEST_LENGTH * ] = '\0'; return out_md5_str;
} int main(void)
{
char md5_hex[MD5_DIGEST_LENGTH]; /* len = 16 */
char md5_str[MD5_DIGEST_LENGTH * + ]; /* len = 33 */ md5_calc_data("hello world", sizeof("hello world")-, md5_hex);
md5_hex2str(md5_hex, md5_str);
printf("[date md5]%s\n", md5_str); md5_calc_file("/etc/passwd", md5_hex);
md5_hex2str(md5_hex, md5_str);
printf("[file md5]%s\n", md5_str); return ;
}

OpenSSL MD5 API的更多相关文章

  1. openssl md5 sha256 rsa des

    原文地址找不到了 #include <windows.h>#include <iostream>#include <cassert> #include <st ...

  2. ../include/squid_md5.h:27:2: error: #error Cannot find OpenSSL MD5 headers【squid安装中】

    ../include/squid_md5.h:27:2: error: #error Cannot find OpenSSL MD5 headers yum install -y openssl* w ...

  3. error: openssl/md5.h: No such file or directory

    出现:error: openssl/md5.h: No such file or directory 原因是openssl-devel没有安装,运行: yum install libssl-dev 就 ...

  4. OpenSSL密码算法库: MD5示例小程序

    OpenSSL http://www.openssl.org/ OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库.SSL协议库以及应用程序.OpenSSL 的密码算法库包含多种加密算 ...

  5. C/C++使用openssl进行摘要和加密解密(md5, sha256, des, rsa)

    openssl里面有很多用于摘要哈希.加密解密的算法,方便集成于工程项目,被广泛应用于网络报文中的安全传输和认证.下面以md5,sha256,des,rsa几个典型的api简单使用作为例子. 算法介绍 ...

  6. OpenSSL - 文件和字符MD5加密实现

    OpenSSL安装: 1.github下载最新的OpenSSL:https://github.com/openssl/openssl 2.在linux解压压缩包 3.安装OpenSSL ./confi ...

  7. 利用OPENSSL 实现MD5加密。

    #include <stdio.h> #include "openssl/evp.h" #include "openssl/md5.h" #incl ...

  8. Linux下c基于openssl生成MD5的函数

    Linux下openssl提供了一系列哈希及加密的函数,如果调用openssl提供的MD5函数生成任意字符串的MD5呢?下面提供了一段代码实现Linux下c字符串生成md5的函数. 具体代码: 1 2 ...

  9. 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

随机推荐

  1. (六) 编写vivid

    title: 编写vivid date: 2019/4/23 19:40:00 toc: true --- 编写vivid 新内核对video_buf的封装更好了,很多函数基本上套个名字就好了,这个可 ...

  2. HBase 在HDFS上的物理目录结构

    根目录 配置项 hbase.rootdir 默认 "/hbase" 根级文件 /hbase/WALs 被HLog实例管理的WAL文件. /hbase/WALs/data-hbase ...

  3. 【sql server】“因为数据库正在使用,所以无法获得对数据库的独占访问权” 解决方案汇总

    #事故现场: 在尝试还原数据库时,出现如下错误: #方案一:设置数据库在单用户模式下工作: 1.数据库上右键“属性”: 2.“选项”->“限制访问”,选择“SINGLE_USER” 3.还原数据 ...

  4. .NET技术-2.0. 操作数据库-EF

    .NET技术-2.0. 操作数据库-EF 项目参见: EF安装配置 参见: https://www.cnblogs.com/1285026182YUAN/p/10772330.html https:/ ...

  5. Spring Cloud微服务实践之路-起始

    由于各种原因,公司要对现有的营销产品进行微服务化,如果可以,则对公司所有产品逐步进行微服务化. 而本人将探索这条路,很艰难,但干劲十足.整个过会记录下来,以便以后查阅. 感谢公司!感谢领导! 相关书籍 ...

  6. CSS3 Background-clip

    上一节在<CSS3 background-size>详细的介绍了CSS3为background新增属性之一,今天和大家一起来学习CSS3中有关于Background的第二新属性Backgr ...

  7. box-shaw四边阴影详解

    四边设置: /*设置四边不同颜色外阴影*/ .element{ box-shadow:-10px 0 10px red, /*左边阴影*/ 10px 0 10px yellow, /*右边阴影*/ 0 ...

  8. JavaScript实现轮播图效果

    我又来了,同志们.老想你们了 捕获小可爱一枚. 下面进入正题:用JavaScript原生代码写轮播图效果. 具体效果就不多说了,网站上面的轮播效果我们都知晓.下面是展示代码 html代码: <d ...

  9. python 中 dlib库的安装

    安装 dlib 库的时候需要用到 CMake 进行本地编译,而Cmake又是基于Visual Studio运行的,我在装这个库的时候,各种找不到教程,就想着分享一下自己的经验. 32位 python3 ...

  10. Sping 里面的适配器模式的实现

    适配器模式----------设计模式最近在看SpringMVC源码,从中看到了比较优秀的设计模式所以来分享下. 1.适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口,Adap ...