我正在使用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。
答案 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
,然后使用解码器检查加密的数据。我假设还有一种设置方法,因为我能够解密使用另一个允许指定填充的库加密的内容。