如何使用OpenSSL为PKCS7_decrypt函数设置填充(OAEP)

时间:2019-07-08 19:30:59

标签: swift encryption openssl

我正在使用OpenSSL加密和解密CMS_envolped数据的有效负载,但是我想使用带OAEP填充(而不是PKCS 1.5填充)的AES256密码。当我使用PKCS1.5填充加密时,我很好,可以解密,但是当我加密并使用OAEP填充时,我无法解密。使用PKCS7_decrypt解密时如何设置填充类型?

docs仅讨论单个标志,该标志不适用于填充。我应该使用其他OpenSSL解密方法来执行支持OAEP的解密吗?我还没有找到任何文档,但是我不承认我不是OpenSSL专家。

    guard PKCS7_decrypt(p7, privateKey, x509Cert, decryptedData, 0) == 1 else {
        throw OpenSSLTests.decryptException
    }

    ...

这无关紧要,但是我正在iOS客户端的Swift中使用OpenSSL。

1 个答案:

答案 0 :(得分:2)

最后找到了答案。

文档在任何地方都没有提到OAEP填充,但是OpenSSL中的PKCS7_decrypt函数似乎不支持OAEP填充。据我所知,当尝试解密时,都会自动检测到密码和填充。

我尝试在OpenSSL中使用CMS_decrypt函数,该函数也没有用于指定填充的标志,并且能够使用OAEP填充解密AES256密码。

 ... 

    //nil would represent failure
    guard let cms = d2i_CMS_bio(encryptedDataBIO, nil) else {
        throw OpenSSLTestErrors.failedToLoadCMS
    }

   //1 indicates success
    guard CMS_decrypt(cms, key, x509Cert, nil, decryptedData, 0) == 1 else {
        throw OpenSSLTestErrors.failedToDecrypt
    }

位于CMS_decrypt的文档位于here

我想请一位精通OpenSSL的人来解释为什么PKCS7_decrypt功能不起作用,而CMS_decrypt对于使用OAEP填充加密的项目却不起作用。 (或者为什么PKCS7_decrypt函数用PKCS1.5填充成功)

我也看不到在OpenSSL的CMS_encrypt函数上可以指定填充的位置。默认情况下,它使用PKCS1.5,然后使用解码器检查加密的数据。我假设还有一种设置方法,因为我能够解密使用另一个允许指定填充的库加密的内容。