带有BIO,char *和二进制数据的SMIME

时间:2016-09-23 01:58:25

标签: c openssl pkcs#7 smime

问题

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标头,最后使用BIO * memoryBIO将其分配给BIO_puts(memoryBIO, data);。< / p>

但是这种方法不起作用,因为二进制数据包含&#34; \ 0&#34;(NULL),它与char类型不一致。

第二种方法

将纯文本和附件分配给BIO 每个,然后&#34;连接&#34;他们。但无法找到办法。

结论

我想知道是否有办法完成这样的壮举。 我还想避免使用中间文件并在内存中构建所有内容。

1 个答案:

答案 0 :(得分:0)

遵循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());

再次感谢j答案以及关于OpenSSL的所有其他答案,你们帮助了我很多。