为什么需要加密
前后端分离之后,页面独立,接口单独返回所需数据,某些开放接口,比如登录,无登录视频播放,评论,多媒体资源等,很容易被第三方调用,爬虫获取。鉴权的接口也有可能正常用户调用接口修改个人某些数据。
https不是加密过了吗,怎么还加密?
抓个包看,浏览器控制台请求参数仍然是明文,https加密是在应用层和传输层之间,应用层就是浏览器客户端,请求发出之后帮你加密,到传输层的时候是安全的。但是浏览器客户端这里仍然能看见,并不安全。
为什么要混合加密?直接用rsa非对称加密不就行了吗
rsa加密内容长度不能过长,我们请求的参数可能会非常的长,aes对称加密速度快,长度长,很适合用来加密请求返回参数。
了解https原理
很容易看出来,服务端保存rsa私钥,客户端保存rsa公钥,客户端生成随机的key并用rsa公钥加密传递给服务端,这样服务端就能通过rsa私钥解密知道客户端的key。后续即可用这个key进行加密传输。
模拟https 用rsa和aes混合加密
和上图原理一样,只是在生成随机key的时候,每次都随机生成一个aes。后续前后端用aes进行加密解密。
其他问题。
Q1:前端代码暴露,用户直接断点调试找到对应代码就能知道请求参数是什么了。
前端代码压缩,加密,混淆。
Q2:前端代码暴露,调试直接能知道这次传递的aes是什么,直接解密。
确实,但是每次请求aes都是新生成的,前端代码加密混淆压缩后,也很难知道生成aes的逻辑。所以即使能知道这次传递的数据是什么,但是也无法进行伪造和爬虫解密破解资源。
防不胜防
网络安全是个大问题,并不是上述那么简单就能完全避免的。但是能增加破解难度。当你的价值不值得别人花费功夫去破解的时候,就自然会放弃。但是就有人要费事搞你。。。那能怎么办嘛。
|