openssl evp 哈希算法(md5,sha1,sha256)
1. 简述
openssl提供了丰富密码学工具,一些常用的哈希算法
比如md5,sha 可以直接用提供的md5.h ,sha.h 接口使用;
为了方便开发者使用,openssl 又提供了一个EVP, evp.h 该文件中提供各种常用工具;
man evp 可以得知,evp 是openssl 提供的更高一级的密码学工具,
可以理解为对提供的各种接口的一个封装
EVP文件包含的比较多,本次主要说明EVP提供的哈希算法
2. 示例 sha512代码
使用需要导入evp.h
//初始化
EVP_MD_CTX *evpCtx = EVP_MD_CTX_new();
EVP_DigestInit_ex(evpCtx, EVP_sha512(), NULL);
char *data = (char *)"hello";
unsigned int len = strlen(data);
//hash计算
EVP_DigestUpdate(evpCtx, data , len);
unsigned char result[SHA512_DIGEST_LENGTH] = {};
//返回结果
EVP_DigestFinal_ex(evpCtx, result, &len);
hex_print("sha512", result, SHA512_DIGEST_LENGTH); //直接使用一个函数
unsigned char resultT[SHA512_DIGEST_LENGTH] = {};
EVP_Digest("hello", , resultT, NULL, EVP_sha512(), NULL);
hex_print("sha512", resultT, SHA512_DIGEST_LENGTH);
上述测试EVP提供的两种方式来进行sha512
3. 根据evp.h提供的内部可知:
上述使用的是EVP_512();那么其他的还有:
const EVP_MD *EVP_md2(void);
const EVP_MD *EVP_md4(void);
const EVP_MD *EVP_md5(void);
const EVP_MD *EVP_md5_sha1(void);
const EVP_MD *EVP_blake2b512(void);
const EVP_MD *EVP_blake2s256(void);
const EVP_MD *EVP_sha1(void);
const EVP_MD *EVP_sha224(void);
const EVP_MD *EVP_sha256(void);
const EVP_MD *EVP_sha384(void);
const EVP_MD *EVP_sha512(void);
定义的hash算法的计算长度
# define SHA224_DIGEST_LENGTH
# define SHA256_DIGEST_LENGTH
# define SHA384_DIGEST_LENGTH
# define SHA512_DIGEST_LENGTH
4. 如果不用EVP提供的,还可以直接使用openssl提供的其他接口
md5.h, sha.h
如sha.h 中关于 sha512提供的接口
int SHA384_Init(SHA512_CTX *c);
int SHA384_Update(SHA512_CTX *c, const void *data, size_t len);
int SHA384_Final(unsigned char *md, SHA512_CTX *c);
unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md);
int SHA512_Init(SHA512_CTX *c);
int SHA512_Update(SHA512_CTX *c, const void *data, size_t len);
int SHA512_Final(unsigned char *md, SHA512_CTX *c);
unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md);
调用的时候同样有两种方式;如下示例
//初始化
SHA512_CTX ctx;
SHA512_Init(&ctx);
char *data = (char *)"hello";
unsigned int len = strlen(data);
unsigned char result[SHA512_DIGEST_LENGTH] = {};
//计算哈希
SHA512_Update(&ctx, data, len);
//取结果
SHA512_Final(result, &ctx);
hex_print("sha512", result, SHA512_DIGEST_LENGTH); //一个函数调用
unsigned char resultT[SHA512_DIGEST_LENGTH] = {};
SHA512("hello", , resultT);
hex_print("sha512", resultT, SHA512_DIGEST_LENGTH);
5. 最后附上,上述例子中的hex_print代码
static void hex_print(const char *name, const unsigned char *buf, size_t len)
{
size_t i;
fprintf(stderr, "%s ", name);
for (i = ; i < len; i++)
fprintf(stderr, "%02X", buf[i]);
fputs("\n", stderr);
}
参考:
测试使用 openssl 1.1.0c
openssl evp 哈希算法(md5,sha1,sha256)的更多相关文章
- 哈希算法MD5和SHA1的C#实现
/* * 哈希算法MD5和SHA1的C#实现 * * * 夏春涛 Email:xChuntao@163.com * Blog:http://bluesky521.cnblogs.com * 运行 ...
- MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别
MD5 SHA1 SHA256 SHA512 这4种本质都是摘要函数,不通在于长度 MD5 是 128 位,SHA1 是 160 位 ,SHA256 是 256 位,SHA512 是512 位. ...
- Hash校验工具、MD5 SHA1 SHA256命令行工具
MyHash 检验工具http://www.zdfans.com/html/4346.html HashMyFiles Hash校验工具http://www.nirsoft.net/utils/has ...
- 文件 MD5 SHA1 SHA256 SHA512 校验码生成工具 V1.3
[程序介绍]免费开源的 文件 MD5 SHA1 SHA256 SHA512 校验码生成工具 V1.3 这是一个有意思的程序,同一个程序,即是图形程序,又是命令行程序.程序作用:输入一个文件的路径,输出 ...
- Windows自带MD5 SHA1 SHA256命令行工具
感恩大佬LiuYanYGZ的文章 MyHash 检验工具http://www.zdfans.com/html/4346.html HashMyFiles Hash校验工具http://www.nirs ...
- You shouldn't use *any* general-purpose hash function for user passwords, not BLAKE2, and not MD5, SHA-1, SHA-256, or SHA-3
hashlib - Secure hashes and message digests - Python 3.8.3 documentation https://docs.python.org/3.8 ...
- 哈希加密算法 MD5,SHA-1,SHA-2,SHA-256,SHA-512,SHA-3,RIPEMD-160 - aTool
一.MD5哈希加密算法 atool.org MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致.是计算机广泛使用的散列算法之一(又译摘要算法. ...
- 转载:哈希加密算法 MD5,SHA-1,SHA-2,SHA-256,SHA-512,SHA-3,RIPEMD-160 - aTool
http://www.atool.org/hash.php 一.MD5哈希加密算法 MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致.是计算 ...
- asp中的md5/sha1/sha256算法收集
对于asp这种古董级的技术,这年头想找一些有用的资料已经不容易了,下面是一些常用的加密算法: md5 (将以下代码另存为md5.inc) <% Private Const BITS_TO_A_B ...
随机推荐
- oracle从零开始学习笔记 二
多表查询 等值连接(Equijoin) select ename,empno,sal,emp.deptno from emp,dept where dept.deptno=emp.deptno; 非等 ...
- angularJS支持的事件
AngularJS提供可与HTML控件相关联的多个事件.例如ng-click通常与按钮相关联.以下是AngularJS支持的事件. ng-click ng-dbl-click ng-mousedown ...
- oracle创建、删除账户
1.创建 /*第1步:创建表空间 */create tablespace xybi datafile 'E:\oracle\oradata\zzxe\xybi_d01' size 100M ; /*第 ...
- echo 输入指定空白字符
ansible-direc:~ # echo -n "starting service....";echo -ne "\033[50G";echo " ...
- 《android 导入第三方源码jar包遇到的坑》
最近想做个app,里面需要有一个二维码扫描的功能,然后谷歌之后发现Zxing这个用的人好多,就看看怎么用: 然后就在github上拉下他们的源码,导入eclipse,然后编译之后导出为jar文件[用的 ...
- RDIFramework.NET ━ 9.9 角色权限管理 ━ Web部分
RDIFramework.NET ━ .NET快速信息化系统开发框架 9.9 角色权限管理 -Web部分 角色权限管理模块主要是对角色的相应权限进行集中设置.在角色权限管理模块中,管理员可以添加或移 ...
- 初识轻量级Java开源框架 --- Spring
初识轻量级Java开源框架 --- Spring 作者:egg 微博:http://weibo.com/xtfggef 出处:http://blog.csdn.net/zhangerqing spri ...
- js接受url参数
1.正则表达式 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=( ...
- Android Studio 入门指南
转载: 原文链接:http://www.codeceo.com/article/android-studio-guide.html 写在前面 作为一个Android 开发者,你应该很了解Android ...
- Android应用权限管理总结
访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permi ...