0
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-然後我需要將它傳遞給OpenSSL的功能中的BIO * data
形式。
PKCS7 *PKCS7_sign(..., ..., ..., BIO *data, ...);
第一種方法
負載從文件系統中的純文本和附件數據,並將其分配給char * data
,操縱數據以添加的各MIME頭,最後將其與BIO_puts(memoryBIO, data);
分配給BIO * memoryBIO
。
但是這種方法不起作用,因爲二進制數據包含「\ 0」(NULL),它不適用於char
類型。
第二種方法
分配純文本和附接至BIO
每個,然後「拼接」起來。但找不到辦法做到這一點。
結論
我想知道是否有完成這樣壯舉的方式。 我也想避免使用中間文件並在內存中構建所有內容。
你看過[openssl smime](https://www.openssl.org/docs/manmaster/apps/smime.html)命令行工具的源代碼嗎? – PnotNP
如果您有嵌入式空值,則無法使用['BIO_puts'](https://www.openssl.org/docs/manmaster/crypto/BIO_puts.html)。相反,您可以使用['BIO_write'](https://www.openssl.org/docs/manmaster/crypto/BIO_puts.html),它同時具有指針和長度。你必須使用正確的工具來完成這項工作。你不能把那個方形釘子砸到一個圓洞裏。 – jww
或者,如果您將所有內容放在一個緩衝區中(並且不會進一步修改它),請使用帶有「BIO_new_mem_buf」的緩衝區創建一個memBIO。還要注意,像PDF這樣的二進制數據放在多部分中是很脆弱的; CTE:base64會更好。 –