gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 20:56:19 30 4
gpt4 key购买 nike

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

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

步骤应该是:

  • 从 p7m 中提取签名内容

  • 从p7m中提取cms结构

  • 将所有内容打包到具有独立签名的新 smime 结构中

这个操作可行吗?

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

最佳答案

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

#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)。

关于openssl - 从不透明的 pkcs7 p7m 转换为分离的 smime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7476303/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com