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 ...
随机推荐
- Android自动化测试工具——monkey简介及入门
记得第二家单位的安卓开发在上线前都用monkey压几个小时,确实也能发现些问题,崩溃率低了些,没测过的确实可以压一压 搜了下资料,monkey确实很简单,发现问题自己搜下是什么问题,别一发现什么就跑去 ...
- js注册验证提示!
<script> var ifEmail =false; var ifPassword; function ainf() { var txtEnun=document.getElement ...
- Tomcat8启动报there was insufficient free space available after evicting expired cache entries - consider increasing the maximum size of the cache
09-Dec-2016 10:57:49.150 WARNING [localhost-startStop-1] org.apache.catalina.webresources.Cache.getR ...
- Linux下添加用户及用户组
创建用户组hdpgroup: $ sudo addgroup hdpgroup 如果用户hdp不存在,把hdp添加到hdpgroup用户组: $ sudo adduser --force -ingro ...
- 《30天自制操作系统》12_day_学习笔记
harib09a: 定时器:(Timer)每隔一段时间,会向CPU发送一个中断.这样CPU不用记住每一条指令的执行时间.没有定时器很多指令CPU都很难执行.例如HLT指令,这个指令的执行时间不是个固定 ...
- matlab中实现Gabor滤波器
1.spatialgabor.m描述gabor函数 % SPATIALGABOR - applies single oriented gabor filter to an image%% Usage: ...
- SQL中插入单引号,新增修改删除
1.插入单引号如果不转化的话,字符串插入到数据库中错误的,只要在字符串中有单引号的地方在加一个单引号即可. 例如:在数据库插入'井下设备' : insert into Static_Bel ...
- ARM9代码分析启动MAIN.C
#define GLOBAL_CLK 1 #include <stdlib.h> #include <string.h> #include “def.h” #include “ ...
- [转]SOCKET通信中TCP、UDP数据包大小的确定
TCP.UDP数据包大小的确定 UDP和TCP协议利用端口号实现多项应用同时发送和接收数据.数据通过源端口发送出去,通过目标端口接收.有的网络应用只能使用预留或注册的静态端口:而另外一些网络应用则可以 ...
- 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能
编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...