【问题标题】:Decrypting s/mime messages in p7m format with OpenSSL使用 OpenSSL 解密 p7m 格式的 s/mime 消息
【发布时间】:2013-07-22 10:03:04
【问题描述】:

我正在尝试使用 OpenSSL 解密 p7m,但无法通过以下代码部分中的错误:

PKCS7 *p7 = NULL;

in = BIO_new_file(convertedResourcePath, "r");

    if (in) {
        NSLog(@"opening p7m file");
    }
    else
        NSLog(@"cannot found p7m file");

    out = BIO_new_file(convertedDecrFilePath, "w");

    if (out) {
        NSLog(@"file for decription has been created");
    }
    else
        NSLog(@"failed to create decription file");


    p7 = SMIME_read_PKCS7(in, NULL);

if (p7) {
        NSLog(@"start reading p7m file");

    }
    else {
        NSLog(@"cannot read p7m file");
        ERR_print_errors_fp(stderr);
    }

 if (PKCS7_decrypt(p7, pkey, cert, out, 0)) {
        NSLog(@"file decrypted sucessfully!");
    }
    else
        NSLog(@"cannot decrypt file");

我得到以下输出:

打开 p7m 文件 2013-07-22 12:45:22.951 smimePrototype[10827:c07] 已创建解密文件 2013-07-22 12:45:22.952 smimePrototype[10827:c07] 无法读取 p7m 文件 2900150892:错误:0D0D40D1:asn1 编码例程:SMIME_read_ASN1:否 内容类型:asn_mime.c:451: 2013-07-22 12:45:22.953 smimePrototype[10827:c07] 无法解密文件

寻求您的帮助,也许 p7 变量可以用其他方式初始化?

【问题讨论】:

  • 你的 p7m 是二进制编码还是 base64? SMIME_read_PKCS7 只能处理 base64。查看openssl.org/docs/crypto/SMIME_read_PKCS7.html的BUGS部分
  • 保罗,谢谢您的回答。看起来 p7m 是用 base64 编码的,也许 SMiME_read_PKCS7 方法不支持 p7m 容器?我还尝试使用以下函数代替 SMIME_read_pKCS7: p7=d2i_PKCS7_bio(in,NULL);它可以工作,但 p7 解密后输出包含大量系统数据
  • 也许试试 PEM_read_bio_PKCS7?
  • Paul,在我的情况下看起来像使用 p7=d2i_PKCS7_bio(in,NULL);方法它是正确的决定,现在应该解析输出(例如使用模拟或类似的东西)。谢谢

标签: objective-c openssl pkcs#7


【解决方案1】:

我尝试使用

p7=d2i_PKCS7_bio(in,NULL);

而不是

p7 = SMIME_read_PKCS7(in, NULL);

而且效果很好。

我希望它会对某人有所帮助。

【讨论】:

  • 你应该得到一枚奖牌。
猜你喜欢
  • 2015-04-15
  • 2014-10-29
  • 2013-06-30
  • 1970-01-01
  • 2020-04-30
  • 2011-02-15
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
相关资源
最近更新 更多