一、名词解释
公钥
RSA 密钥体系中对外公开的部分,通常用于数据加密、验证数字签名。
私钥
RSA 密钥体系中非公开的部分,通常用于数据解密、数据签名。
数字签名
就是只有信息的发送者才能产生的,别人无法伪造的一段数字串,它同时也是对发送者发送的信息的真实性的一个证明。
二、为什么要使用签名
在系统间报文交互为保证上送报文可靠性[防止中间人攻击],通常做法是在报文中加上校验字[数字签名],并约定好相关算法。
三、实现
为方便系统间交互,本文直接讲述原理,对于RSA_sign 及 RSA_verify的使用下期进行介绍。
签名对需要上送的报文[en_data]计算特征值[sign_block],相关算法包括[md5、sha1、sha256、sha512等等]。
使用私钥[pri_key]对sign_block加密获得数字签名[sign]。
将sign与en_data打包发送给对方。
验签解析收到的报文,拆分为sign 及 en_data。
对en_data计算特征值[sign_block],相关算法包括[md5、sha1、sha256、sha512等等双方协商]。
使用公钥[pub_key]对sign解密,获得sign_block1。
比较sign_block 和 sign_block1,若匹配则验证成功,报文未被篡改。
生成公私钥对int rsa_gen_der_key(int KEY_LENGTH, unsigned char * prik, unsigned char * pubk) {
int ret = 1;
RSA