我试图验证RSA签名的消息,但是,在该环境中我可以访问的API只有加密和解密。我想我理解使用公钥的验证和加密是相似的。实际上,运行以下代码似乎是有效的:
openssl rsautl -sign -in clear -inkey private_key.pem -out signed
openssl rsautl -encrypt -pubin -inkey public_key.pem -in signed -raw -hexdump第二个命令将得到初始的清除,填充(然后,我只需要卸载并验证它是否符合清除)。然而,-raw是我遇到问题的地方。由于签名的消息是密钥的大小,所以我无法加密它( API会拒绝,如果省略-raw,openssl也会拒绝)。
我不知道该怎么做。我觉得我想做的应该是可能的。
发布于 2015-09-03 06:51:46
您尝试使用的API自动pads (可能是RSAES-PKCS1-v1_5填充)。相反,您需要它在签名验证期间验证和删除填充。
如果不能跳过填充,则不能使用API。试着找一个真正可以验证的库。你不应该自己编程RSA,但最终它只是一个算法。只要您能够访问密钥(最好是一个大整数数学库),您就应该能够自己执行RSA模幂和验证/删除填充。
你不能只是神奇地去掉11个字节,这些字节是在模幂之前添加到明文中的。OAEP会提供更多的支持。
您可以尝试使用公钥对签名进行解密,并希望API检测公钥并执行验证和解填充操作,但这是一次很长的尝试。请注意,如果无法验证填充,则应收到错误消息。
请注意,Diffie-Hellman还执行模幂运算.有时您可以使用DH功能对RSA签名进行“原始解密”。
https://crypto.stackexchange.com/questions/27892
复制相似问题