我有一个由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 ++中找到相应的函数。
也许我错了,但很难找到相关的文档。任何帮助将不胜感激。
答案 0 :(得分:0)
你拥有的是PEM格式的对象; DER格式对象在文本编辑器中看起来像垃圾(由于是二进制格式)。因此,您需要PEM_read_PKCS7()
。
OpenSSL文档本质上是一团糟,如果没有某种指南,很难学会解决问题。我推荐O'Reilly Network Security with OpenSSL文字;虽然为OpenSSL 0.9.6 / 0.9.7编写,但它仍然是对该库的一个很好的介绍(API没有太大变化),并将作为一个方便的参考。