使用OpenSSL解密c ++中的PKCS7文件

时间:2012-08-20 13:35:10

标签: c++ openssl pkcs#7

我有一个由M2Crypto python库生成的PKCS7文件,如下所示:

-----BEGIN PKCS7-----
MIIBWAYJKoZIhvcNAQcDo[cut]
-----END PKCS7-----

是否是由公钥记录的二进制内容。

现在我需要用C ++解密它,但似乎没有认识到这种格式。我尝试了d2i_PKCS7_bio()SMIME_read_PKCS7(),但我总是遇到错误:

8957:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1316:
8957:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:380:Type=PKCS7

和类似的错误尝试通过这样的命令行:

openssl smime -decrypt -inform DER -binary -inkey privkey.pem

修改
我找到了正确的命令行选项:

openssl cms -decrypt -in samplepkcs7.pem  -inkey privkey.pem -inform pem

现在我需要在C ++中找到相应的函数。

也许我错了,但很难找到相关的文档。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

你拥有的是PEM格式的对象; DER格式对象在文本编辑器中看起来像垃圾(由于是二进制格式)。因此,您需要PEM_read_PKCS7()

OpenSSL文档本质上是一团糟,如果没有某种指南,很难学会解决问题。我推荐O'Reilly Network Security with OpenSSL文字;虽然为OpenSSL 0.9.6 / 0.9.7编写,但它仍然是对该库的一个很好的介绍(API没有太大变化),并将作为一个方便的参考。