数据加密后再传输更安全。RSA加密是一种比较古老的加密算法。
流程:
客户端要向服务器发送信息,“宝塔镇河妖!”,为了信息不被黑客解析出来,于是使用 RSA加密算法加密了再发送。
- 客户端访问服务器。
- 服务器生成一对密切相关的密钥,公钥和私钥。
- 服务器把公钥发给客户端。私钥自己留着,绝对不可以给任何人知道。自己也不行。
- 客户端将:“宝塔镇河妖!”用公钥加密,可能变成了,“呵呵呵呵呵”,再发送给服务器。
-
服务器收到,“呵呵呵呵呵”,用私钥解密,就得到了,“宝塔镇河妖!”
数据用公钥加密了,却可以用私钥解密出原数据。这个原因在于公钥和私钥是有联系的。
在这个过程中,黑客可以截取传输过程中所有的包,但不管有用,数据虽然是用公钥加密,但无法用公钥解密。只有拿到私钥才有用。可是,私钥一直存放在服务器中,黑客无法截取到。除非你提前攻陷了服务器,那就是另外的事情了,我们不讨论。而且,如果都攻破服务器了,还取什么私钥啊。
加密的简单解析:
因为假设公钥是(3,7),加密过程如下
** "宝塔镇河妖! " 3 mod 7 得到 "呵呵呵呵呵" **
黑客手里有 "呵呵呵呵呵" 和 公钥 (3,4),但是能解出 “宝塔镇河妖” 吗?几乎不可能。能够三次方后再对七取余数为 “呵”,的,可不只有“宝”字,还有无数其它的字。因此公钥可以加密数据却不能解密自己加密过的数据。相当于 100 = a x b ,你能准确推出 a,b是几吗?不能。
私钥是怎么解密的呢?
**"呵呵呵呵呵" 5 mod 7 得到 "宝塔镇河妖! " **
(我这里的私钥和公钥的数值都是乱写的,方便解释,请不要在意这些细节)
为什么私钥能解密?,简单来说是因为欧拉定理。(我这篇文章只是为了梳理流程,数学验证要自己去学习哦)网友 Damonare 的解释很好:
https://juejin.im/post/5a76d7e3f265da4e752770a3
如果数据传输的包过程被黑客盗取了,我们还怎么传递信息给服务器呢?当然是重新传啊,这个不用担心,这是属于数据传输失败,会重传的。