OpenSSL

密码学和SSL/TLS工具包

evp

名称

evp - 高级加密函数

概要

#include <openssl/evp.h>

描述

EVP 库提供了一个高级接口用于访问加密函数。

EVP_SealXXXEVP_OpenXXX 函数提供公钥加密和解密功能来实现数字“信封”。

EVP_DigestSignXXXEVP_DigestVerifyXXX 函数实现了数字签名和消息认证码 (MAC)。另请参阅旧的 EVP_SignXXXEVP_VerifyXXX 函数。

可以使用 EVP_EncryptXXX 函数进行对称加密。 EVP_DigestXXX 函数提供消息摘要。

EVP_PKEYXXX 函数提供了一个高级接口用于访问非对称算法。要创建一个新的 EVP_PKEY,请参阅 EVP_PKEY_new(3)。EVP_PKEY 可以与特定算法的私钥相关联,方法是使用 EVP_PKEY_fromdata(3) 页面上描述的函数,或者可以使用 EVP_PKEY_keygen(3) 生成新的密钥。可以使用 EVP_PKEY_eq(3) 比较 EVP_PKEY,或者使用 EVP_PKEY_print_private(3) 打印 EVP_PKEY。 EVP_PKEY_todata(3) 可用于将密钥转换回 OSSL_PARAM(3) 数组。

EVP_PKEY 函数支持各种非对称算法操作。

有关密钥协商,请参阅 EVP_PKEY_derive(3)
有关签名和验证,请参阅 EVP_PKEY_sign(3)EVP_PKEY_verify(3)EVP_PKEY_verify_recover(3)。但是,请注意,这些函数不会对要签名的数进行摘要。因此,通常您会为此目的使用 EVP_DigestSignInit(3) 函数。
有关加密和解密,请分别参阅 EVP_PKEY_encrypt(3)EVP_PKEY_decrypt(3)。但是,请注意,这些函数仅执行加密和解密。由于公钥加密是一项昂贵的操作,因此通常您会使用 EVP_SealInit(3)EVP_OpenInit(3) 函数将加密的消息包装在“数字信封”中。

EVP_BytesToKey(3) 函数提供了一些对基于密码的加密的有限支持。仔细选择参数将提供与 PKCS#5 PBKDF1 兼容的实现。但是,新应用程序通常不应使用此功能(例如,更倾向于使用来自 PCKS#5 的 PBKDF2)。

EVP_EncodeXXXEVP_DecodeXXX 函数实现了 Base64 编码和解码。

所有对称算法(密码)、摘要和非对称算法(公钥算法)都可以由提供替代实现的 ENGINE 模块替换。如果密码或摘要的 ENGINE 实现被注册为默认值,那么各种 EVP 函数将自动优先使用这些实现,而不是内置的软件实现。有关更多信息,请参阅 engine(3) 手册页。

尽管许多算法都存在低级算法特定函数,但不建议使用它们。它们不能与 ENGINE 一起使用,并且不能使用低级函数访问新算法的 ENGINE 版本。此外,这使得代码更难以适应新算法,并且某些选项在低级水平上没有得到很好的支持,并且某些操作使用高级接口效率更高。

参见

EVP_DigestInit(3)EVP_EncryptInit(3)EVP_OpenInit(3)EVP_SealInit(3)EVP_DigestSignInit(3)EVP_SignInit(3)EVP_VerifyInit(3)EVP_EncodeInit(3)EVP_PKEY_new(3)EVP_PKEY_fromdata(3)EVP_PKEY_todata(3)EVP_PKEY_keygen(3)EVP_PKEY_print_private(3)EVP_PKEY_decrypt(3)EVP_PKEY_encrypt(3)EVP_PKEY_sign(3)EVP_PKEY_verify(3)EVP_PKEY_verify_recover(3)EVP_PKEY_derive(3)EVP_BytesToKey(3)ENGINE_by_id(3)

版权所有 2000-2021 OpenSSL 项目作者。保留所有权利。

根据 Apache 许可证 2.0(“许可证”)获得许可。除非符合许可证,否则您不得使用此文件。您可以在源代码分发中的 LICENSE 文件或 https://www.openssl.org/source/license.html 中获取副本。