使用OpenSSL 1.0.1f解密时,如何通过API确定RSA填充方式?
如何通过OpenSSL API确定RSA密文的填充方式?
很遗憾,没有直接的OpenSSL API可以直接检测某段RSA密文使用的是哪种填充方式。填充机制的设计初衷就是让密文呈现随机性,不同填充类型的密文结构差异并没有简单的API可以直接识别判断。
不过你可以通过「尝试不同填充方式解密」的方法来间接判断:
- 先尝试用
RSA_PKCS1_PADDING调用解密函数:如果解密成功,且输出的明文符合你的预期(比如是可阅读的内容、符合业务数据格式等),那大概率使用的就是这种填充。要是解密失败(RSA_private_decrypt返回-1),可以通过ERR_get_error()获取具体错误码,排除密钥不匹配等问题后,再尝试下一种。 - 接着尝试
RSA_PKCS1_OAEP_PADDING:OAEP填充的解密过程会做更严格的验证逻辑,失败概率相对更高。如果解密成功且明文有效,那基本可以确定是这种填充方式。 - 最后尝试
RSA_SSLV23_PADDING:它和PKCS1填充结构类似但有细微差异,若解密成功且明文正确,就能锁定这种填充。
另外提醒几点:
- 务必确保你使用的私钥和加密该密文的公钥是配对的,否则所有解密尝试都会失败,无法准确判断填充类型。
- OpenSSL 1.0.1f是比较老旧的版本,存在不少已知安全漏洞,建议尽量升级到更安全的分支(比如1.1.1系列或3.x系列),新版本不仅安全性更高,错误提示和API也更完善。
内容的提问来源于stack exchange,提问作者Henrique Gouveia
相关产品推荐
相关产品推荐

