首先脑子里要有一个概念, 是什么,?怎么做?为什么要用? 带着这3个问题, 去学习去理解. 最后加以实践 , 准没错.
1.说明
当和第三方对接交互, 为了保证数据安全, 通常双方会约定某种方式进行 加解密(签名验签).
例如(公司项目中标准的案例):
外部平台生成一对密钥串,把公钥发给开放平台,外部平台用私钥进行签名,开放平台用公钥验证签名。 开放平台生成一对密钥串,把公钥发给外部平台,外部平台用公钥加密报文的key,开放平台用私钥对key进行解密。
安全规则:
接收别人的参数时, 用公钥对数据解密, 然后验签verify(加密数据,公钥, 数字签名) ---- 用公钥验证签名
发送参数给被人时,用私钥对数据加密, 然后签名sign(加密数据,私钥) ------ 用私钥进行签名
总结: 公钥和私钥是成对的,它们互相解密。公钥加密,私钥解密。私钥数字签名,公钥验证。 用公钥加密,私钥解密。称之为加密解密. 用私钥加密,公钥解密,称之为签名验签
2.算法 - RSA
1.RSA概述
加密是网络传输中非常重要的一环,它保证了信息的安全性,让他人无法通过抓包来获取通讯的信息也无法通过伪造信息而实现对系统的入侵。其中最为常用的信息传递加密方式就是RSA加密。且RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。
2.RSA加密原理
RSA与传统加密方式不同的是,他是非对称加密(非对称,就是指 该算法需要一对密钥, 使用其中一个加密 , 则需要用另一个才能解密. 密钥分为公钥和私钥, 私钥是自己保存, 公钥提供给对方),可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。
RSA加密方式是:
(1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。 (2)甲方获取乙方的公钥,然后用它对信息加密。 (3)乙方得到加密后的信息,用私钥解密。 eg:1.后端生成publicKey与privateKey 2.后端返回publicKey给前端 3.前台使用publicKey给敏感字段加密 4.使用post方式发送数据给后端 5.后端使用publicKey与pvivateKey进行解密。
3.RSA案例
这里将A理解为客户端,B理解为服务端,可以比较好理解.
- 加解密过程简述
A和B进行通信加密,B要先生成一对RSA密钥,B自己持有私钥,给A公钥 --->A使用B的公钥加密要发送的内容,然后B接收到密文后通过自己的私钥解密内容
- 签名验签过程简述
A给B发送消息,A先计算出消息的消息摘要,然后使用自己的私钥加密消息摘要,被加密的消息摘要就是签名.(A用自己的私钥给消息摘要加密成为签名) B收到消息后,也会使用和A相同的方法提取消息摘要,然后用A的公钥解密签名,并与自己计算出来的消息摘要进行比较-->如果相同则说明消息是A发送给B的,同时,A也无法否认自己发送消息给B的事实.(B使用A的公钥解密签名文件的过程,叫做"验签").
对加密/解密和签名/验签完整过程详细理解:
A->B:1. A提取消息m的消息摘要h(m),并使用自己的私钥对摘要h(m)进行加密,生成签名s2. A将签名s和消息m一起,使用B的公钥进行加密,生成密文c,发送给BB:1. B接收到密文c,使用自己的私钥解密c得到明文m和数字签名s2. B使用A的公钥解密数字签名s解密得到H(m)3. B使用相同的方法提取消息m的消息摘要h(m)4. B比较两个消息摘要。相同则验证成功;不同则验证失败
补充:
签名流程(1.组装待签名字符串 2.调用签名函数 3.使用签名)
验签流程(1.组装待验签字符串 2.调用验签函数 )
数字签名的作用:保证数据完整性,机密性和发送方角色的不可抵赖性
加密与签字结合时,两套公私钥是不同的
参考资料:
优秀博主的日常总结:
demo :
支付宝支付下单返回错误信息