C++ 在openssl中使用PKCS7_Decrypt()解密字符*

C++ 在openssl中使用PKCS7_Decrypt()解密字符*,c++,openssl,pkcs#7,openca,C++,Openssl,Pkcs#7,Openca,我想在openSSL中使用PKCS7\u encrypt()和PKCS7\u decrypt()函数进行加密和解密。我在openSSL演示中使用了这个示例。我要做的是以char*的格式对消息进行加密,并使用char*进行解密。我不想读写文件。下面是要加密的代码,它可以完美地工作并且没有问题: in = BIO_new_file("encr.txt", "r"); if (!in) return 0; /* encrypt content */ p7 = PKCS7_encrypt(re

我想在openSSL中使用
PKCS7\u encrypt()
PKCS7\u decrypt()
函数进行加密和解密。我在openSSL演示中使用了这个示例。我要做的是以
char*
的格式对消息进行加密,并使用
char*
进行解密。我不想读写文件。下面是要加密的代码,它可以完美地工作并且没有问题:

in = BIO_new_file("encr.txt", "r");
if (!in)
    return 0;

/* encrypt content */
p7 = PKCS7_encrypt(recips, in, EVP_des_ede3_cbc(), flags);
if (!p7)
    return 0;

char* chEnc = new char[1000];

BIO* memorybio = BIO_new(BIO_s_mem());
BIO* base64bio = BIO_new(BIO_f_base64());
BIO* outbio = BIO_push(base64bio, memorybio);

/* Copy PKCS#7 */
long ll = i2d_PKCS7_bio(outbio, p7);
BIO_flush(outbio);
BIO_set_flags(memorybio, BIO_FLAGS_MEM_RDONLY);
BIO_get_mem_data(memorybio, &chEnc);
cout << chEnc << "\n";
问题是,
PKCS7_decrypt
不起作用,并且它不能解密为
out
变量。行
if(!PKCS7_decrypt(p7,rkey,rcert,out,0))后返回0,它从函数返回。解密的过程正确吗?我应该使用openSSL的其他API来转换还是什么

期待您的建议和意见


谢谢

您在收件人名单上吗?因为您需要是收件人才能解密邮件。确保使用正确的密钥和证书。

PKCS7_decrypt(p7,rkey,rcert,out,0)
失败,因为传递给例程的BIO“out”是空指针

如果不想将输出写入文件,请尝试传递内存BIO:

BIO *out = BIO_new(BIO_s_mem());
然后,您可以直接从外部访问解密的数据,一旦处理完,您就可以销毁它

BIO *out = BIO_new(BIO_s_mem());