OpenSSL MD5 API
#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的更多相关文章
- openssl md5 sha256 rsa des
原文地址找不到了 #include <windows.h>#include <iostream>#include <cassert> #include <st ...
- ../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 ...
- error: openssl/md5.h: No such file or directory
出现:error: openssl/md5.h: No such file or directory 原因是openssl-devel没有安装,运行: yum install libssl-dev 就 ...
- OpenSSL密码算法库: MD5示例小程序
OpenSSL http://www.openssl.org/ OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库.SSL协议库以及应用程序.OpenSSL 的密码算法库包含多种加密算 ...
- C/C++使用openssl进行摘要和加密解密(md5, sha256, des, rsa)
openssl里面有很多用于摘要哈希.加密解密的算法,方便集成于工程项目,被广泛应用于网络报文中的安全传输和认证.下面以md5,sha256,des,rsa几个典型的api简单使用作为例子. 算法介绍 ...
- OpenSSL - 文件和字符MD5加密实现
OpenSSL安装: 1.github下载最新的OpenSSL:https://github.com/openssl/openssl 2.在linux解压压缩包 3.安装OpenSSL ./confi ...
- 利用OPENSSL 实现MD5加密。
#include <stdio.h> #include "openssl/evp.h" #include "openssl/md5.h" #incl ...
- Linux下c基于openssl生成MD5的函数
Linux下openssl提供了一系列哈希及加密的函数,如果调用openssl提供的MD5函数生成任意字符串的MD5呢?下面提供了一段代码实现Linux下c字符串生成md5的函数. 具体代码: 1 2 ...
- 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
随机推荐
- 如何快速上手Mac
网络上关于Mac的教程很多,大部分问题通过百度和谷歌就能搞定了.对于技巧的细节,我将不再过多的重复,看了我的参考资料基本就能够全部了解,他们也比我讲得详细得很多.我这篇文章想做的,是以一个普通的win ...
- prometheus 基于DNS的目标发现
prometheus 基于DNS的目标发现 DNS服务发现依赖于查询A.AAAA或SRV DNS记录. 1.基于 SRV 记录发现 scrape_configs: - job_name: 'webap ...
- JS基础-第1天
JavaScript 第一天笔记 学习目标 了解Javascript的作用及其组成 掌握变量的使用,知道变量的作用是存储数据 掌握变量的命名规范 掌握 JavaScript 的 5 种简单数据类型 掌 ...
- k8s网络之设计与实现
k8s网络主题系列: 一.k8s网络之设计与实现 二.k8s网络之Flannel网络 三.k8s网络之Calico网络 K8s网络设计与实现是在学习k8s网络过程中总结的内容.在学习k8s网络各种插件 ...
- [C++]类成员返回语句 return *this 的理解
经常会在类似 copy-assignment 的成员函数看到返回语句 return *this ,这类函数通常返回类型是所属类的引用. 类成员函数的隐式指针 class *this const 经过 ...
- 使用Ueditor编辑器上传图片总结;
今天使用Ueditor编辑器上传图片一直出问题,在网上找了多种方法,最后总结如下: Ueditor编辑器是百度开发的编辑器,要在jsp页面添加Ueditor编辑器,需要以下几步: (1)到 http: ...
- 课程设计个人报告——基于ARM实验箱的捕鱼游戏的设计与实现
课程设计个人报告--基于ARM实验箱的捕鱼游戏的设计与实现 一.个人贡献 参与课设题目讨论及部分过程 资料收集 负责代码调试 捕鱼游戏相应功能的实现 实验环境 Eclipse软件开发环境: ARM实验 ...
- Basic 001 Bob
Instructions Bob is a lackadaisical teenager. In conversation, his responses are very limited.Bob an ...
- vue组件中data为什么必须是个函数
<body> <div id="app"> <counter></counter> </div> <templat ...
- PC端判断浏览器类型及移动端判断移动设备类型
浏览器代理检测,可以检测出来用户使用的浏览器类型,也可以检测浏览器所在的操作系统 navigator.userAgent (1).判断浏览器类型 var t = navigator.userAgent ...