RSA签名过程如下:
1) 对用户数据进行摘要;
2) 构造X509_SIG结构并DER编码,其中包括了摘要算法以及摘要结果。
3) 对2)的结果进行填充,填满RSA密钥长度字节数。比如1024位RSA密钥必须填满128字节。具体的填充方式由用户指定。
4) 对3)的结果用RSA私钥加密。
RSA_eay_private_encrypt函数实现了3)和4)过程。
RSA验签过程是上述过程的逆过程,如下:
1) 对数据用RSA公钥解密,得到签名过程中2)的结果。
2) 去除1)结果的填充。
3) 从2)的结果中得到摘要算法,以及摘要结果。
4) 将原数据根据3)中得到摘要算法进行摘要计算。
5)比较4)与签名过程中1)的结果。
RSA_eay_public_decrypt实现了1)和2)过程。