1

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

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

是由公钥加密的二进制内容。

现在我需要用 C++ 解密它,但它似乎无法识别这种格式。我试过d2i_PKCS7_bio()and 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++ 中找到相应的函数。

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

4

1 回答 1

0

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

The OpenSSL documentation is inherently a mess, and it's very difficult to learn your way around without a guide of some sort. I recommend the O'Reilly Network Security with OpenSSL text; while written for OpenSSL 0.9.6/0.9.7, it's still an excellent introduction to the library (the API hasn't changed very much) and will serve as a handy reference.

于 2012-08-21T19:39:00.120 回答