文章目录
🌺概要
#include <openssl/evp.h>
int EVP_OpenInit(EVP_CIPHER_CTX *ctx, EVP_CIPHER *type, unsigned char *ek,
int ekl, unsigned char *iv, EVP_PKEY *priv);
int EVP_OpenUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
int *outl, unsigned char *in, int inl);
int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
🌻描述
EVP信封例程是信封解密的高级接口。他们解密公钥加密的对称密钥,然后使用它解密数据。
EVP_OpenInit()初始化一个密码上下文ctx,用于用密码type解密。它使用私钥priv解密在ek参数中传递的长度为ekl字节的加密对称密钥。IV在iv参数中提供。
EVP_OpenUpdate()和EVP_OpenFinal()具有与EVP_DecryptUpdate()和EVP_DecryptFinal()例程完全相同的属性,如EVP_EncryptInit手册页。
🌹注意
可以像调用EVP_DecryptInit()一样调用EVP_OpenInit()两次。第一次调用应该有priv设置为NULL,并且(在设置任何密码参数之后)应该用type设置为空。
如果密码在type参数是可变长度密码,则密钥长度将被设置为恢复的密钥长度的值。如果密码是固定长度密码,则恢复的密钥长度必须与固定密码长度匹配。
🌷返回值
如果出错,EVP_OpenInit()返回0;如果成功,返回一个非零整数(实际上是恢复的密钥大小)。
EVP_OpenUpdate()返回1表示成功,返回0表示失败。
如果解密失败,EVP_OpenFinal()返回0;如果解密成功,则返回1。