带有 BIO、char * 和二进制数据的 SMIME
SMIME with BIO, char * and binary data
问题
1- 我想创建一个 MIME 消息。像这样:
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="---12345"
This is a multipart message in MIME format.
---12345
Content-Type: text/plain
This is the plain text
---12345
Content-Type: application/pdf
>> PDF binary code here <<
---12345
2- 然后我需要以 BIO * data
.
的形式将它传递给 OpenSSL 函数
PKCS7 *PKCS7_sign(..., ..., ..., BIO *data, ...);
第一种方法
从文件系统加载纯文本和附件数据并将其分配给 char * data
,操作数据以添加相应的 MIME headers,最后将其分配给 BIO * memoryBIO
BIO_puts(memoryBIO, data);
.
但是这种方法不起作用,因为二进制数据包含“\0”(NULL),这与 char
类型不兼容。
第二种方法
将纯文本和附件分配给 BIO
每个 然后 "concatenate" 它们。但是找不到办法做到这一点。
结论
我想知道是否有办法实现这样的壮举。
我还想避免使用中间文件并构建所有内容 in-memory.
按照jww的建议,我最终使用的是BIO_write();
。
BIO * inBIO = NULL;
std::vector<unsigned char> data = GetData();
inBIO = BIO_new(BIO_s_mem());
BIO_write(inBIO, data.data(), data.size());
再次感谢 jww 的回答以及所有其他关于 OpenSSL 的回答,您帮了我大忙。
问题
1- 我想创建一个 MIME 消息。像这样:
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="---12345"
This is a multipart message in MIME format.
---12345
Content-Type: text/plain
This is the plain text
---12345
Content-Type: application/pdf
>> PDF binary code here <<
---12345
2- 然后我需要以 BIO * data
.
PKCS7 *PKCS7_sign(..., ..., ..., BIO *data, ...);
第一种方法
从文件系统加载纯文本和附件数据并将其分配给 char * data
,操作数据以添加相应的 MIME headers,最后将其分配给 BIO * memoryBIO
BIO_puts(memoryBIO, data);
.
但是这种方法不起作用,因为二进制数据包含“\0”(NULL),这与 char
类型不兼容。
第二种方法
将纯文本和附件分配给 BIO
每个 然后 "concatenate" 它们。但是找不到办法做到这一点。
结论
我想知道是否有办法实现这样的壮举。 我还想避免使用中间文件并构建所有内容 in-memory.
按照jww的建议,我最终使用的是BIO_write();
。
BIO * inBIO = NULL;
std::vector<unsigned char> data = GetData();
inBIO = BIO_new(BIO_s_mem());
BIO_write(inBIO, data.data(), data.size());
再次感谢 jww 的回答以及所有其他关于 OpenSSL 的回答,您帮了我大忙。