3

我正在尝试使用带有一些 X.509 证书的 cryptoapi 加密和签名文件。我想用 openssl 验证和解密这个文件。

在 Windows 上,我认为我需要使用该CryptSignAndEncryptMessage功能来加密和签署数据。我使用MSDN 中的这个示例来创建签名和加密的消息。

如何使用 openssl 解密/验证此文件?我从消息中删除了前 4 个字节,因为它包含消息的长度(来自 windows blob)。当我打电话时,openssl -asn1parse我得到一些输出,表明它可以被 openssl 解析。

当尝试使用 openssl 验证签名时,我收到一个错误:

openssl rsautl -verify -inkey AlonsoCert.pem -keyform pem -certin -in sandvout-without-4byte.txt
RSA operation error
3073579208:error:0406706C:rsa routines:RSA_EAY_PUBLIC_DECRYPT:data greater than mod len:rsa_eay.c:680:
4

3 回答 3

1

CryptSignAndEncrypt 消息似乎使用带有空 ASN.1 参数字段的 RC4 密码,并且查看 OpenSSL 源,openssl 在尝试生成 IV 时阻塞(RC4 不需要)。

尝试在 CryptAndSignMessage 中使用其他密码(例如 AES)。无论如何,RC4 非常陈旧、不安全且已过时。

于 2012-12-05T19:16:41.097 回答
1

尝试使用openssl smime来验证和/或解密。语法相当简单,但您可以在此处找到信息:http ://www.openssl.org/docs/apps/smime.html

于 2012-12-05T19:31:11.547 回答
1

您的ASN.1 转储信息显示您已从 CryptoAPI 代码创建了 PKCS#7 CMS 输出。因此,您无法使用基本的 OpenSSL 解密和验证方法。

相反,请使用以下cms模式:

openssl cms -decrypt -inform DER -in sandvout-without-4byte.txt 
    -out decrypted.bin -recip testkey.pfx

(注意:我以前没有使用过这种模式,所以我认为我建议的语法是正确的。无论哪种方式,这应该是朝着解决这个问题的正确方向迈出的一步。)

于 2012-12-03T11:04:07.017 回答