如何使用 OpenSSL 添加应以流模式加密的数据?
Posted
技术标签:
【中文标题】如何使用 OpenSSL 添加应以流模式加密的数据?【英文标题】:How add data that shoud be encrypted in stream mode using OpenSSL? 【发布时间】:2020-02-26 10:27:20 【问题描述】:我需要获取 CMS 封装数据,通过几个步骤加密来自客户端的输入数据。我可以在 PKCS11 中使用这样的功能:
C_EncryptInit(...)
、C_EncryptUpdate(...)
、C_EncryptFinal(...)
。 C_EncryptUpdate(...)
它允许我添加数据,这些数据将被加密(在几个部分中加密数据)。在 OpenSSL 中,我找到了 CMS_encrypt(...)
flag = CMS_STREAM
但我不明白如何按上述方式或其他方式添加数据?
【问题讨论】:
【参考方案1】:我会自己回答。
我的 C++ 代码片段:
BIO* output = BIO_new(BIO_s_mem());//init
CMS_ContentInfo* cms = CMS_encrypt(certs, NULL, cipher, CMS_STREAM | CMS_BINARY);//init
BIO* input = BIO_new_CMS(output, cms);//init
BIO_write(input, pbData, cbData);//For multiple calls - adding data for cms structure
std::vector<uint8_t> cmsBuf = ReadMemBio(m_output);//For multiple calls - get encrypted data in order to send it to client, which save it to a file.
BIO_flush(input);//finalizing
我希望它对某人有用。如果您有任何问题 - 请直接问我。
【讨论】:
以上是关于如何使用 OpenSSL 添加应以流模式加密的数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 OpenSSL::Cipher 加密 UTF-8 字符串中的数据?