如何使用 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开发学习总结

openssl之对称加密算法命令详解

如何使用 OpenSSL::Cipher 加密 UTF-8 字符串中的数据?

PHP mcrypt to openssl BF-CBC:如何获得相同的加密值

iOS使用openSSL加密应该怎么做

如何使用 OpenSSL 使用 AES 加密文件?