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)的更多相关文章

  1. 哈希算法MD5和SHA1的C#实现

    /* * 哈希算法MD5和SHA1的C#实现 *  *  * 夏春涛 Email:xChuntao@163.com  * Blog:http://bluesky521.cnblogs.com * 运行 ...

  2. MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别

    MD5 SHA1 SHA256 SHA512 这4种本质都是摘要函数,不通在于长度  MD5 是 128 位,SHA1  是 160 位 ,SHA256  是 256 位,SHA512 是512 位. ...

  3. Hash校验工具、MD5 SHA1 SHA256命令行工具

    MyHash 检验工具http://www.zdfans.com/html/4346.html HashMyFiles Hash校验工具http://www.nirsoft.net/utils/has ...

  4. 文件 MD5 SHA1 SHA256 SHA512 校验码生成工具 V1.3

    [程序介绍]免费开源的 文件 MD5 SHA1 SHA256 SHA512 校验码生成工具 V1.3 这是一个有意思的程序,同一个程序,即是图形程序,又是命令行程序.程序作用:输入一个文件的路径,输出 ...

  5. Windows自带MD5 SHA1 SHA256命令行工具

    感恩大佬LiuYanYGZ的文章 MyHash 检验工具http://www.zdfans.com/html/4346.html HashMyFiles Hash校验工具http://www.nirs ...

  6. 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 ...

  7. 哈希加密算法 MD5,SHA-1,SHA-2,SHA-256,SHA-512,SHA-3,RIPEMD-160 - aTool

    一.MD5哈希加密算法 atool.org MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致.是计算机广泛使用的散列算法之一(又译摘要算法. ...

  8. 转载:哈希加密算法 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),用于确保信息传输完整一致.是计算 ...

  9. asp中的md5/sha1/sha256算法收集

    对于asp这种古董级的技术,这年头想找一些有用的资料已经不容易了,下面是一些常用的加密算法: md5 (将以下代码另存为md5.inc) <% Private Const BITS_TO_A_B ...

随机推荐

  1. Git reset 常见用法

    Git reset 1. 文件从暂存区回退到工作区 2. 版本回退 1.1 git reset HEAD filename :回退文件,将文件从暂存区回退到工作区 //也可以使用 git reset ...

  2. vim - Putting the current file on the Windows clipboard

    http://vim.wikia.com/wiki/VimTip432 command! Copyfile let @*=substitute(expand("%:p"), '/' ...

  3. 开发不改bug?给你支个招

    在测试过程中,不免会遇到开发人员因为一些原因不想修改个别bug的情况.那一般遇到这种问题时,我们该如何去推进开发修改bug呢? 我们先来分析下到底会有哪些原因会导致开发不修改bug 1. 开发与测试对 ...

  4. mysql qps tps计算

    Information from web QPS (Query per second) (每秒查询量)TPS(Transaction per second) (每秒事务量,如果是InnoDB会显示,没 ...

  5. Oracle在dos命令下导出导入

    DOS下运行的命令,也可以加参数在SQL/PLUS环境下运行简单例子实现 单表备份(前提库的结构是一样的)导出:开始钮->运行->输入CMD->进入DOS界面EXP 用户名/密码@连 ...

  6. RDIFramework.NET ━ 9.6 模块(菜单)管理 ━ Web部分

    RDIFramework.NET ━ .NET快速信息化系统开发框架 9.6  模块(菜单)管理 -Web部分  模块(菜单)管理是整个框架的核心,主要面向系统管理人员与开发人员,对普通用户建议不要授 ...

  7. R数据实战vehicles--1

    新建项目vehicles-project 数据文件vehicles.csv与varlabels.txt放在项目文件中

  8. Unity3D 装备系统学习Inventory Pro 2.1.2 总结

    前言 写在最前面,本文未必适合纯新手,但有一些C#开发经验的还是可以看懂的,虽然本人也是一位Unity3D新人,但是本文只是自己在学习Inventory Pro的学习总结,而不是教程,本人觉得要读懂理 ...

  9. 使用NPOI导入导出标准的Excel

    关于NPOI NPOI是POI项目的.NET版本,是由@Tony Qu(http://tonyqus.cnblogs.com/)等大侠基于POI开发的,可以从http://npoi.codeplex. ...

  10. 关于安装qt之后的qmake命令

    今天通过在archlinux中安装qt5发现了关于qmake这个命令的一些事情. 1. /bin/qmake 是 /bin/qtchooser 的符号链接,/bin/qtchooser 由一个叫 qt ...