OpenSSL解密失败但错误代码为0。

8
当我尝试使用OpenSSL中的CMS解密S/MIME加密消息时,解密方法返回值为0,表示未成功。
OpenSSL.org表示:
CMS_decrypt()成功返回1,失败返回0。可以从ERR_get_error(3)获取错误信息。
当我运行以下命令时...
out = BIO_new(BIO_s_mem());
if (!out)
        assert(false);

int error = CMS_decrypt(cms, rkey, rcert, out, NULL, 0);
    if (!error) {
    fprintf(stderr, "Error Decrypting Data\n");
    printf("error code: %d\n", ERR_get_error());
    ERR_print_errors_fp(stderr);
    assert(false);
}

在这段代码中,error变量的值为0,这意味着发生了错误,并且从ERR_get_error()返回的错误代码也是0。此外,ERR_print_errors_fp()没有输出任何内容,这意味着没有发生错误。

以上代码的输出:

Error Decrypting Data
error code: 0
Assertion failed: (false)

有人有关于这里出了什么问题的建议吗?谢谢。

1
解密成功了吗?如果是这样,那么值得检查错误返回是否按预期返回0(返回值可能被意外交换),或者只需在控制语句中使用“ERR_get_error()”值。 - MD-Tech
@MD-Tech:不行。 :-/ BIO 是空的。即使我创建一个文件 BIO 而不是 mem BIO,它也会创建新文件,但不会在其中写入任何内容... - Chris
1个回答

1
经过多周尝试不同的方法和挫败,我最终使用了OpenSSL的PKCS#7解密。由于CMS基本上是基于PKCS#7的,因此使用CMS进行加密并使用PKCS7进行解密可以正常工作。
我使用的方法是pkcs7_decrypt()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接