WebSocket数据加密——AES与RSA混合加密
前言
之前在寫“一套簡單的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混合加密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [译]如何在C#中调试LINQ查询
- 下一篇: 基于 EntityFramework 生