从不透明的 pkcs7 p7m 转换为分离的 smime

Posted

技术标签:

【中文标题】从不透明的 pkcs7 p7m 转换为分离的 smime【英文标题】:conversion from opaque pkcs7 p7m to detached smime 【发布时间】:2011-11-20 12:52:33 【问题描述】:

您好,我找不到将不透明的 pkcs#7(p7m) 转换为明文 deatached smime 的方法,以便常规 mime 库可以处理已签名的内容。

我想获取 p7m 文件并将其转换为保持有效签名的 smime 消息。

步骤应该是:

从 p7m 中提取签名内容

从 p7m 中提取 cms 结构

将所有内容打包在带有分离签名的新 smime 结构中

这个操作可以吗?

我已经搜索过 openssl 手册,但找不到方法。

【问题讨论】:

【参考方案1】:

我能够使用以下代码将不透明签名的消息转换为分离的消息:

#include <openssl/evp.h>
#include <openssl/bio.h>
#include <openssl/pkcs7.h>

int main(int argc, char **argv)

    BIO *data = NULL, *bin = NULL, *bout = NULL;
    PKCS7 *p7, *p7b;

    OpenSSL_add_all_algorithms();

    bin = BIO_new_file("opaque.p7m", "rb");
    p7 = SMIME_read_PKCS7(bin, &data);
    p7b = PKCS7_dup(p7);

    data = PKCS7_dataInit(p7, NULL);

    PKCS7_set_detached(p7b, 1);

    bout = BIO_new_file("detached.p7m", "wb");
    SMIME_write_PKCS7(bout, p7b, data, PKCS7_BINARY | SMIME_DETACHED);

为了测试程序,我使用以下命令生成 opaque.p7m:

$ openssl smime -sign -in foo.txt -signer my.crt -inkey my.key -nodetach -out opaque.p7m

简而言之,上面的代码没有检查。要接受不同的输入格式,您可以将SMIME_read_PKCS7 更改为PEM_read_bio_PKCS7 (PEM) 或d2i_PKCS7_bio (DER)。

【讨论】:

“附加”签名和“不透明”签名的意思一样吗?

以上是关于从不透明的 pkcs7 p7m 转换为分离的 smime的主要内容,如果未能解决你的问题,请参考以下文章

[Delphi]一个功能完备的国密SM4类(TSM4)

压缩 AS2 主体

UIPageViewController 背景在 Objective C iOS 中从不透明

无法使用 MimeKit 解密 p7m

无法使用MimeKit解密p7m

如何从 Swift 3 中的不透明指针创建类型化指针?