openssl之EVP函数

本文介绍了OpenSSL中的EVP接口,提供了高层加密功能。涵盖了公钥/私钥存储、多种加密/解密算法、消息摘要算法及加密操作等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EVP

EVP函数提供一个高层次的接口OpenSSL加密功能。

他们提供以下功能:

  • 一个一致的接口,不管底层算法或模式
  • 支持众多的算法
  • 加密/解密使用对称和非对称算法
  • 签名/验证
  • 导出密钥
  • 安全散列函数
  • 消息认证码
  • 支持独立的加密引擎

使用evp_pkeys编辑]

evp_pkey对象用于存储公钥和私钥(可选),以及相关的算法和参数。他们也能够存储对称MAC密钥。

支持以下evp_pkey类型:

  • evp_pkey_ec:椭圆曲线密钥(为ECDSA和ECDH)-支持签名/验证操作,和密钥推导
  • evp_pkey_rsa:支持RSA签名/验证和加密/解密
  • evp_pkey_dh:Diffie Hellman -密钥推导
  • evp_pkey_dsa:DSA密钥的签名/验证
  • evp_pkey_hmac:生成消息认证码HMAC密钥
  • evp_pkey_cmac:一个生成消息认证码的CMAC的关键

Note:DSA处理SSL / TLS在OpenSSL密码套件改变1.1.0。详情见DSA与OpenSSL—1.1在邮件列表

参考Manual:EVP PKEY new(3)这页的手册资料去生成evp_pkey对象,并且参考Manual:EVP PKEY set1 RSA(3)这页手册的资料去了解如何初始化一个evp_pkey对象。

参考EVP Key and Parameter Generation学习有关生成新密钥和相关参数的信息。

使用算法和工作模式

密码和消息摘要算法需要分别确定一个唯一的evp_cipher和evp_md对象。你不能创造自己,而是使用一个内建的函数返回一个你希望使用特定的算法。参考evp.h文件的密码和消息摘要的全部声明。

evp.h摘取一些evp_cipher函数,如下所示:

const EVP_CIPHER *EVP_aes_128_ctr(void);
const EVP_CIPHER *EVP_aes_128_ccm(void);
const EVP_CIPHER *EVP_aes_128_gcm(void);
const EVP_CIPHER *EVP_aes_128_xts(void);
const EVP_CIPHER *EVP_aes_192_ecb(void);
const EVP_CIPHER *EVP_aes_192_cbc(void);

这些密码都是AES(Advanced Encryption Standard)算法的变形。有两种不同的密钥长度,分别为128位的密钥和192位的密钥。也有各种不同的加密模式,即CTRCCMGCMXTS,ECB和CBC。并不是所有的算法支持所有的模式,所以你想用特定组合的时候,应该去考察evp.h

下面从evp.h摘取一些示例消息摘要函数,如下所示:

const EVP_MD *EVP_md2(void);
const EVP_MD *EVP_md4(void);
const EVP_MD *EVP_md5(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);

从这些函数返回的对象是内置的,使用后不用被释放

加密操作

下面的加密操作是可能的。参考相关的页面详情

参见


原文地址: EVP
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值