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 (不写邀请码,没有现金送)国内私 ...
随机推荐
- 用js提取字符串中的某一段字符
String.prototype.getQuery = function(name){var reg = new RegExp("(^|&)"+ name +"= ...
- 《Linux下cp XXX1 XXX2的功能》的实现
<Linux下cp XXX1 XXX2的功能>的实现 一.题目要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyC ...
- 0426JavaSE01day02.txt=========正则、Object、包装类详解
正则表达式 基本正则表达式:正则表达式简介.分组(). "^"和"$" String正则API:matches方法.split方法.replaceAll方法 O ...
- localStorage sessionStorage cookie indexedDB
目录: localStorage sessionStorage cookie indexedDB localStorage localStorage存储的数据能在跨浏览器会话保留 数据可以长期保留,关 ...
- SQL Server 游标的使用示例
Ø 简介 本文主要记录 MSSQL 中的游标使用示例,在有必要时方便借鉴查阅.游标一般定义在某段功能性的 SQL 语句中,或者存储过程中.之所以选择用它,是因为有时候无法使用简单的 SQL 语句满足 ...
- Linux动态链接库的生成和使用
目录 1. 编写C程序 2. 编译动态链接库 3. 使用共享库 4. 执行程序 5. 参考资料 1. 编写C程序 比如编写myfunc.c文件,里面包含两个函数,一个是say_hello,另一个是ca ...
- 在Synology群晖上运行Frp客户端
一.Synology群晖上开启SSH 二.使用Putty连接 1,登陆管理员账户和密码 2,连接成功后输入sudo su - 输入管理员的密码切换到root权限 下载:wget https://git ...
- RAID 划分
RAID0:N块盘组成,逻辑容量为N块盘容量之和:RAID1:两块盘组成,逻辑容量为一块盘容量:RAID3:N+1块盘组成,逻辑容量为N块盘容量之和:RAID5:N块盘组成,逻辑容量为N-1块盘容量之 ...
- 记一场与 cookie 的相遇
简介: cookie 翻译过来为 “小甜点,一种酥性甜饼干,很美味的...”,咳咳,打住!我们这里说的是 “甜点” 文件,它是浏览器储存在用户电脑上的一小段纯文本格式的文件. 由于 http 是一种无 ...
- javaFX的控制台实现
最近做了个javaFX的工具,想弄个控制台输出信息,准备用TextArea来模拟console,但直接操纵console对象的话不依赖这个项目的地方就无法输出信息到控制台了,至于log,以前弄过一个输 ...