使用RSA和AES加密传输数据 js到php

感觉写这篇还挺是时候的,虽然本应该在上一篇之后就应该写这篇的。一直拖到现在,拖到了网易”被拖“。

上篇中说到使用aes加密,但是无论如何他还是很容易破解的,而且可以说无难度破解,首先如果想在传输过程中破解,就算你是传输的加密的数据,但是他只要同时劫持到你的js,看一下加密的方式,就可以反向破解出来,是没有任何难度,那么你加密不加密都是没有意义的。原因主要是因为aes本身采用的是对称加密方式,所以会产生上面的结果。所以我们使用rsa加密,但rsa加密过程计算量比较大,比较慢,可以用它来加密小量信息,所以我们可以用它来加密aes的key,然后在用aes加密,这样就算劫持到破解难度也增加到了破解rsa加密上去了,理论上还是很有难度的。如图:

rsa aes

rsa aes

从图片中就可以很明确的了解了整个过程了,其实主要还是使用aes加密,不过先用ras对aes加密的key进行传输(绿色部分)。然后就没有办法得到key,也就没有办法破解aes明文了。需要一个主意的地方就是客户端要产生一个random string,不然ras传key其实是毫无意义的。

原理其实就这么简单,代码更简单了,为了方便(懒),只描述rsa加密的部分,aes部分参考上一篇。下面上代码,客户端js,服务端用的php。

首先要生成一对秘钥:

js的ras加密使用的是jsencrypt

php部分

主要是php的关于openssl的函数的使用。需要注意的是传过来的先要base64解密一下。

本打算写个详细的AES + RSA的demo呢,马上两点了,先碎吧。

参考:

js rsa加密库

php openssl

使用RSA和AES加密传输数据 js到php》上有6条评论

      1. 屠名科

        求助,这个我还是没有理解,怎么回事,一个随机的字符串,用rsa公钥加密,然后再用,aes加密数据,我现在卡在怎么用aes加密呢?

        回复
  1. Pingback引用通告: 使用AES加密传输数据 js到php - polande

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.