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

Openssl 从不透明pkcs7 p7m到分离smime的转换,openssl,digital-signature,pkcs#7,smime,Openssl,Digital Signature,Pkcs#7,Smime,您好,我找不到一种方法将不透明的pkcs#7(p7m)转换为明文分离的smime,以便常规mime库可以处理签名内容 我想获取p7m文件并将其转换为smime消息,以获取有效的签名 这些步骤应该是: 从p7m中提取签名内容 从p7m中提取cms结构 将所有内容打包在新的smime结构中,并附带独立签名 这个手术可能吗 我已经搜索了openssl手册,但找不到方法。我能够使用以下代码将不透明的签名消息转换为分离的消息: #包括 #包括 #包括 int main(int argc,字符**arg

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

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

这些步骤应该是:

  • 从p7m中提取签名内容

  • 从p7m中提取cms结构

  • 将所有内容打包在新的smime结构中,并附带独立签名

这个手术可能吗


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

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

#包括
#包括
#包括
int main(int argc,字符**argv)
{
BIO*data=NULL,*bin=NULL,*bout=NULL;
PKCS7*p7,*p7b;
OpenSSL_添加_所有算法();
bin=BIO_new_文件(“不透明的.p7m”、“rb”);
p7=SMIME\U read\U PKCS7(bin和数据);
p7b=PKCS7_-dup(p7);
data=PKCS7_dataInit(p7,NULL);
PKCS7_集_分离(p7b,1);
bout=BIO_new_文件(“detached.p7m”、“wb”);
SMIME_write_PKCS7(bout,p7b,数据,PKCS7_二进制| SMIME_分离);
}
为了测试程序,我使用以下命令生成opaque.p7m:

$ openssl smime -sign -in foo.txt -signer my.crt -inkey my.key -nodetach -out opaque.p7m
简而言之,上面的代码没有检查。要接受不同的输入格式,您可以将
SMIME\u-read\u-PKCS7
更改为
PEM\u-read\u-bio\u-PKCS7
(PEM)或
d2i\u-PKCS7\u-bio
(DER)。

附加的签名是否与“不透明”签名相同?