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] = {0};  //返回结果
    EVP_DigestFinal_ex(evpCtx, result, &len);
    hex_print("sha512", result, SHA512_DIGEST_LENGTH);

  //直接使用一个函数
    unsigned char resultT[SHA512_DIGEST_LENGTH] = {0};
    EVP_Digest("hello", 5, 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    28
# define SHA256_DIGEST_LENGTH    32
# define SHA384_DIGEST_LENGTH    48
# define SHA512_DIGEST_LENGTH    64

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] = {0};
    //计算哈希
    SHA512_Update(&ctx, data, len);
    //取结果
    SHA512_Final(result, &ctx);
    hex_print("sha512", result, SHA512_DIGEST_LENGTH);

    //一个函数调用
    unsigned char resultT[SHA512_DIGEST_LENGTH] = {0};
    SHA512("hello", 5, 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 = 0; i < len; i++)
        fprintf(stderr, "%02X", buf[i]);
    fputs("\n", stderr);
}

参考:

openssl 1.1.0c 源码

时间: 2024-12-06 17:54:50

openssl evp 哈希算法(md5,sha1,sha256)的相关文章

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

对于asp这种古董级的技术,这年头想找一些有用的资料已经不容易了,下面是一些常用的加密算法: md5 (将以下代码另存为md5.inc) + ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

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

MyHash 检验工具http://www.zdfans.com/html/4346.html HashMyFiles Hash校验工具http://www.nirsoft.net/utils/hash_my_files.html Windows自带MD5 SHA1 SHA256命令行工具 2018年03月07日 01:25:11 Sq-List 阅读数:6257 标签: SHA1MD5SHA256命令行Windows 更多 个人分类: hash加密 certutil -hashfile  <文

用PowerShell的命令行检查文件的校验MD5 SHA1 SHA256

certutil  -hashfile yourfilename MD5 certutil -hashfile yourfilename SHA1 certutil -hashfile yourfilename SHA256 MD5  SHA1 SHA256 字母一定要大写 原文地址:https://www.cnblogs.com/pipci/p/11403418.html

java 加密解密算法MD5/SHA1,DSA

通常,使用的加密算法 比较简便高效,密钥简短,加解密速度快,破译极其困难.本文介绍了 MD5/SHA1,DSA,DESede/DES,Diffie-Hellman的使用. 第1章基础知识 1.1. 单钥密码体制 单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密. 通常,使用的加密算法比较简便高效,密钥简短,加解密速度快,破译极其困难.但是加密的安全性依靠密钥保管的安全性,在公开的计算机网络上安全地传送和保管密钥是一个严峻的问题,并且如果在多用户的情况下密钥的

Windows/Linux命令查看文件MD5,SHA1,SHA256 文件校验

windows: certutil -hashfile yourfilename.ext MD5 certutil -hashfile yourfilename.ext SHA1 certutil -hashfile yourfilename.ext SHA256 Linux: 原文地址:http://blog.51cto.com/sf1314/2123109

SHA1 安全哈希算法(Secure Hash Algorithm)

安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA).对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要.当接收到消息的时候,这个消息摘要可以用来验证数据的完整性.在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要. SHA1有如下特性:不可以从消息摘要中复原信息:两个不同的消息不

转:MD5(Message-Digest Algorithm 一种哈希算法)

什么是MD5算法 MD5讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值(hash value),用于确保信息传输完整一致. 实质上,MD5 只是一种哈希算法 哈希算法,即 hash,又叫散列算法,是一类把任意数据转换为定长(或限制长度)数据的算法统称.例如我叫张三,你叫李四,那么「人 -> 人名」的算法就叫属于一种哈希算法.哈希算法通常用于制作数字指纹,数字指纹的意思就是「你看到这个东

Microsoft 根证书计划弃用 SHA-1 哈希算法

Microsoft 根证书计划弃用 SHA-1 哈希算法 微软官方2016年1月12日发布安全通报,自2016年1月1日起Microsoft 已经发布代码弃用变更,也就是说2016年1月1号后用SHA1代码签名证书签名的软件在Win 7 和以上版本将不受信任,2016年1月1日前签名且加时间戳的程序将继续受信任. 此通报的适用范围有多大? 此通报旨在帮助客户评估某些使用通过 SHA-1 哈希算法进行签名的 x.509 数字证书的应用程序的风险,并建议管理员和证书颁发机构开始使用 SHA-2 代替

C# MD5摘要算法、哈希算法

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法) MD5算法具有以下特点: 1.压缩性:任意长度的数据,算出的MD5值长度都是固定的. 2.容易计算:从原数据计算出MD5值很容易. 3.抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别. 4.弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的. 5.强抗碰撞: