非对称加密RSA及对称加密3DES方式
接收方(服务端)产生一对秘钥即公钥和私钥,公钥传给接入方(客户端),私钥自己留存;
同时客户端也要产生一对公钥和私钥,公钥提供给接收方私钥自己留存。
接入方生成随机码并用接收方提供的公钥进行加密,同时再用随机码与要传输的信息加密,发送给服务端。
服务端获取加密过的随机码和信息后,随机码通过接收方的私钥解密得到这就是(完成了一次非对称加密),再用随机码解密加密后的信息(完成了一次对称加密)。
非对称加密就是:一方使用公钥加密,另一方使用私钥解密。
对称加密就是:双方共同用一个秘钥进行解密
如常见接口安全通信的方式:
1)接收方提供一个RSA公钥(zzyRsaPubKey)给接入系统
2)接入系统生成RSA密钥对,留用私钥(channelRsaPriKey),把RSA公钥(channelRsaPubKey)上传给接收方
发起请求(接入方)
1) 生成24个字节(数字字母组合)的随机3des密钥(channelRd3DesKey);
2) 使用接收方提供的RSA公钥(zzyRsaPubKey)对随机3des密钥(channelRd3DesKey)做加密,得到3des密钥密文encryptRd3DesKey(encryptKey);
3) 使用随机3des密钥(channelRd3DesKey)对文档定义的业务参数data做加密,得到业务参数密文encryptData;
4) 使用自己系统的私钥(channelRsaPriKey)
对MD5(channel_no+timestamp+encryptKey+encryptData)做签名,得到签名参数siginature;
// http请求参数为
{
" encrypt_key":"encryptKey",
" encrypt_data":"encryptData",
"mac":"siginature"
}
请求处理(接收方)
1) 结合(channel_no+ timestamp+encryptKey+encryptData)和签名参数siginature,用接入系统提供的公钥(channelRsaPubKey)验签,验证成功则证明报文的有效性,验证失败则直接返回报错。
2) 解密encryptKey,得到channelRd3DesKey;
3) 用3des的密钥channelRd3DesKey解密encryptData,得到业务参数明文data;
返回(接收方)
1) 生成24个字节(数字字母组合)的随机3des密钥(zzyRd3DesKey);
2) 使用接入系统提供的RSA公钥(channelRsaPubKey)对随机3des密钥(zzyRd3DesKey)做加密,得到3des密钥密文encryptRd3DesKey;
3) 使用随机3des密钥(zzyRd3DesKey)对文档定义的返回的业务参数data做加密,得到返回参数密文encryptData;
4) 对MD5 (encryptRd3DesKey+encryptData)做签名,得到签名参数siginature;
//返回参数为:
{
"encrypt_key":"encryptRd3DesKey",
"encrypt_data":"encryptData",
"mac":"siginature"
}
返回处理(接入方)
1) 结合(encryptRd3DesKey+encryptData)和签名参数siginature,用接收方提供的公钥(zzyRsaPubKey)验签,验证成功则证明报文的有效性,验证失败则记录丢弃。
2) 用自己的rsa私钥(channelRsaPubKey)解密encryptRd3DesKey,得到zzyRd3DesKey;
3) 用3des的密钥zzyRd3DesKey解密encryptData,得到返回参数明文data;