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

Posted

技术标签:

【中文标题】OpenSSL 解密失败但错误代码为 0【英文标题】:OpenSSL decrypt fails but error code is 0 【发布时间】:2012-03-15 00:49:00 【问题描述】:

当我尝试在 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);

...错误变量为 0,表示发生错误,ERR_get_error() 的错误代码也为 0。此外,ERR_print_errors_fp() 不打印任何内容,表示没有错误。

上述代码的输出:

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

有没有人建议这里出了什么问题?谢谢

【问题讨论】:

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

经过数周尝试不同方法和挫折后,我最终使用了 OpenSSL 的 PKCS#7 解密。 由于 CMS 基本上基于 PKCS#7,它可以很好地使用 CMS 加密和使用 PKCS7 解密。

我使用的方法是pkcs7_decrypt()

【讨论】:

以上是关于OpenSSL 解密失败但错误代码为 0的主要内容,如果未能解决你的问题,请参考以下文章

RSA 加密然后解密失败并出现“oaep 解码错误”

无法下载“https://getcomposer.org/versions”文件:SSL 操作失败,代码为 1。OpenSSL 错误消息:错误:1416F086

OpenSSL 上的 EVP_DecryptFinal_ex 错误

EVP_DecryptFinal_ex调用返回失败,解密数据错误的解决方法

EVP_DecryptFinal_ex调用返回失败,解密数据错误的解决方法

CODEIGNITER - fwrite():SSL操作失败,代码为1. OpenSSL错误消息:错误:140D00CF:SSL例程:SSL_write:protocol is shutdown(示例