如何使用 OpenSSL 添加应以流模式加密的数据?
How add data that shoud be encrypted in stream mode using OpenSSL?
我需要获取 CMS 封装数据,通过几个步骤对来自客户端的输入数据进行加密。我可以在 PKCS11 中使用这样的函数:
C_EncryptInit(...)
、C_EncryptUpdate(...)
、C_EncryptFinal(...)
。 C_EncryptUpdate(...)
它允许我添加将被加密的数据(分几个部分加密数据)。在 OpenSSL 中,我发现 CMS_encrypt(...)
有
flag = CMS_STREAM
但我不明白如何按上述或其他方式添加数据?
我会自己回答。
我的 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
我希望它对某人有用。如果您有任何问题 - 请问我。
我需要获取 CMS 封装数据,通过几个步骤对来自客户端的输入数据进行加密。我可以在 PKCS11 中使用这样的函数:
C_EncryptInit(...)
、C_EncryptUpdate(...)
、C_EncryptFinal(...)
。 C_EncryptUpdate(...)
它允许我添加将被加密的数据(分几个部分加密数据)。在 OpenSSL 中,我发现 CMS_encrypt(...)
有
flag = CMS_STREAM
但我不明白如何按上述或其他方式添加数据?
我会自己回答。
我的 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
我希望它对某人有用。如果您有任何问题 - 请问我。