使用OpenSSL以p7m格式解密s / mime消息

时间:2013-07-22 10:03:05

标签: objective-c openssl pkcs#7

我尝试使用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变量可以用其他方式初始化?

1 个答案:

答案 0 :(得分:5)

我尝试使用

p7=d2i_PKCS7_bio(in,NULL);

而不是

p7 = SMIME_read_PKCS7(in, NULL);

并且效果很好。

我希望它会帮助别人。