前言

  之前在写“一套简单的web即时通讯”,写到第三版的时候没什么思路,正好微信公众号看到一篇讲API交互加密,于是就自己搞了一套AES与RSA混合加密,无意中产生应用在WebSocket想法,好在思路都差不多,稍微改动一下就能实现,特意写这篇博客记录下来

  WebSocket是HTML5 开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。它基于 TCP 传输协议,并复用 HTTP 的握手通道。

  1、建立连接,客户端通过 HTTP 请求与服务端协商升级协议。协议升级完成后,后续的数据交换则遵照 WebSocket 的协议。

  2、数据交换,建立连接后,后续的操作通过TCP协议以数据帧的格式传输交换。

  通过TCP进行数据交换,不像http请求,websocket数据交换在浏览器上使用开发者工具(F12)是看不到数据,但使用抓包软件仍然可以获取到这些TCP传输数据,例如Charles和Fiddler等,以明文的方式直接传输很容易被第三方监听,因此,我觉得是有必要的

  前面我们实现了一套AES与RSA混合加密(详情请戳:前后端API交互数据加密——AES与RSA混合加密完整实例),我们现在用它实现一下WebSocket数据加密

思路、代码

  工具类我们直接用之前API加密那一套就行,操作也与之前的API加密类似,发送前加密、收到数据后解密再交给业务处理,有个地方要注意的是,我们在进行消息转发时,要用的是接收方的前端公钥进行加密

  按照我们目前的规则,项目启动后生成后端密钥对,访问登录页面时响应后端公钥给前端,前端保存到后端RSA公钥并存到sessionStorage,每个页面都引入头部head.html(使用thymeleaf的<script th:replace="head::static"></script>),在head里面获取前端RSA公钥密码、AES的key,并放到window,这些都跟之前的一样,不需要改变,需要改动的是下面这些:

  建立WebSocket连接时,将当前用户的前端公钥发送到后端,后端进行Map保存

  前端发送前加密

  后端收到后先解密

  后端发送之前先加密,这里要用消息接收方的前端公钥进行加密

  前端收到消息后先解密

  效果演示  

  按照程序流程:

  前端加密前、加密后

 

  后端解密前、解密后

  后端加密前、加密后

  前端解密前、解密后

  完整页面演示:

  好友上线在线系统通知没有问题

  聊天没有问题

  后记

  WebSocket的加密就先记录到这里,其他的后面再补充

原文地址:https://www.cnblogs.com/huanzi-qch/p/11010153.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

WebSocket数据加密——AES与RSA混合加密相关推荐

  1. AES与RSA混合加密完整实例

    前段时间看到一篇文章讲如何保证API调用时数据的安全性(传送门:https://blog.csdn.net/ityouknow/article/details/80603617),文中讲到利用RSA来 ...

  2. DES和RSA混合加密解密

    关于DES和RSA各自单独加密的弊端大家自行学习吧,本文使用对称式加密算法DES和非对称式加密算法RSA结合做数据加密的方式,先进行DES加密,将DES加密后的内容进行base64编码,再将base6 ...

  3. DES和RSA混合加密及解密-JAVA

    DES和RSA混合加密及解密 实际开发过程中,RSA生成的公钥应保存在加密方,私钥应保存在解密方,可使用读取文件内容方式获取密钥. maven依赖: <!-- DES --><dep ...

  4. 一张图让你搞懂DES与RSA混合加密技术

    原址 1.RSA加解密原理 第1步:ipB先给A发送B公钥,ipA用B公钥加密A公钥发送给ipB,ipB拿到后,用B私钥去取里面内容,ipB拿到A公钥. 第2步:双方通信前,先把自己公钥发给对方!用对 ...

  5. RSA+AES混合加密实例

    文章目录 前言 一.AES+RSA混合加密是什么? 二.使用步骤 1.引入库 2.RAS+AES加密工具类 总结 Learning Process: 希望可以给你带来帮助!!! 前言 在服务器与终端设 ...

  6. 对称加密非对称加密混合加密

    对称加密&非对称加密&混合加密 写于前 iOS中常在哪些场景应用到 写一个系列 本文概要 对称加密(Symmetric Cryptography) 非对称加密(ASymmetric C ...

  7. python实现rsa数据加密_python实现RSA与AES混合加密

    RSA加密 这是一种非对称加密算法,密钥分为公钥和私钥.通常私钥长度有512bit,1024bit,2048bit,4096bit,长度越长,越安全,但是生成密钥越慢,加解密也越耗时.一般公钥用来加密 ...

  8. 学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密

    学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密 技术标签: RSA  AES  RSA AES  混合加密  整合 前言:    为了提高安全性采用了RSA,但 ...

  9. php rsa aes混合加密,手动演示RSA和AES混合加密过程

    RSA属于非对称加密算法,它虽然解决了"在不安全的信道上安全地传递密钥"这一问题,但缺点在于运算量太大,造成加/解速度太慢,所以在具体的工程应用上是混合使用了对称和和非对称加密算法 ...

最新文章

  1. 如何修改桌面,收藏夹,我的文档等等的存储位置
  2. PHPStorm不能修改PHP langauge level
  3. 生产力再提速,618 互动项目进化之路
  4. hive 行转列和列转行的方法_Hive超详细存储
  5. Exchange2007 从零到入门(2)---收件人管理
  6. 快狗打车通过港交所上市聆讯
  7. python有道字典_Python基于有道实现英汉字典功能
  8. 写专业书确能帮助自己快速提升——写在我的书出版半年后,同时和大家分享选书的方式...
  9. 某单位配置GRE_×××命令
  10. php安装mamcache扩展时报错
  11. settimeout在各个浏览器的最小时间
  12. C++实现贪吃蛇游戏
  13. 等差数列和等比数列公式
  14. html文件做屏保win10,win10系统把屏保设置为桌面壁纸的处理方法
  15. c++对8位灰度图进行二值化处理
  16. 解决linux的-bash: ./xx: Permission denied/tensorflow 运行cpu还是gpu的方法
  17. 行列式某一行的元素与另一行对应元素的代数余子式的乘积之和等于0
  18. 孪生素数猜想,不值一提
  19. win10无法连接这个网络的解决方案【亲测有效】
  20. TinyPng图片压缩的正确打开方式

热门文章

  1. 【我们一起写框架】C#的AOP框架
  2. Java基础系列8:Java的序列化与反序列化(修)
  3. 物理专线流量平滑切换
  4. WPF定时刷新UI界面
  5. 设置 Xcode 自动生成代码片段
  6. linux--web服务器
  7. SQL如何备份到异机
  8. 复制Oracle表的结构
  9. 设计模式:面向对象的设计原则下(ISP、DIP、KISS、YAGNI、DRY、LOD)
  10. WPF 实现火炬效果