對json串加密解密
1. SpringBoot 請求消息體解密(通信加密解密)
在一些安全性要求較高的項目中,我們希望客戶端請求數據可以做到數據加密,伺服器端進行解密。(單純的HTTPS仍難以滿足安全需要。)
本文基於SpringBoot針對消息體進行解密,目前僅支持請求消息解密。(響應消息過大情況下,加密會帶來嚴重的性能問題。)
流程如下:
使用DES cbc模式對稱加密請求體。要求客戶端請求前加對消息體進行加密,伺服器端通過SpringMVC Advice攔截請求解密後,傳給controller的方法。
@ControllerAdvice註解可以掃描針對Controller層的擴展組件。通過@Sort註解可以使其支持順序載入。
RequestBodyAdviceAdapter是RequestBodyAdvice適配器類,可以方便的擴展所需要的方法。
RequestBodyAdvice功能如下:
允許在請求消息體在被讀取及調用convert轉換成實體之前做一些個人化操作,作用於含有@RequestBody註解的請求。實現此介面的類,需要在RequestMappingHandlerAdapter中配置或通過@ControllerAdvice註解配置。
原文如下:
使用以下註解即可快速開啟全部請求的伺服器端消息體解密功能。
使用scan-annotation可開啟註解所標注的Conrtoller的類或其方法的解密功能。將要解密的方法或類上添加@SecretBody註解。並開啟以下配置:
可以使用annotation-class配置自己的自定義註解:
作用於整個類:
作用於方法:
默認密鑰如下,可以自行修改
前端調用時,需先將要請求的消息體通過DEScbc模式加密消息體(如json字元串)後傳輸。一般在http工具的請求攔截器中進行處理。如為json,仍然需要指定content-type為application/json。
postman請求示例如下:
2. .NET進階篇04-Serialize序列化、加密解密
知識需要持續積累、總結與沉澱,思考與寫作是促進成長的催化劑。本文內容輕松,重在代碼展示與實踐,對大腦挑戰不大,故解析部分較少,代碼段落較多,旨在提供直接可用的技術指南。
一、概述
序列化是將內存中的對象轉換為持久化的二進制數據形式,用於存儲或傳輸,主要目的是實現不同平台間通信。序列化與反序列化作用互補,前者將對象狀態保存,後者則還原對象狀態。類上添加Serializable特性標記,允許序列化,非序列化欄位通過NonSerialized特性排除。泛型類BinarySerializeHelper可包裝BinaryFormatter,簡化序列化過程。
加密技術通過編碼消息,構建安全交流機制,確保消息僅由發送者與期望接收者理解。加密安全性的三個關鍵點:信息不可篡改、保護隱私和防止抵賴。
二、序列化
BinaryFormatter用於對象的二進制序列化與反序列化。創建實例,調用Serialize方法寫入文件流,反序列化時調用Deserialize方法。
XML序列化使用XmlSerializer類,無需Serializable特性,實例化時需指定待序列化的對象類型。
JSON支持更輕量的數據傳輸,.NET提供DataContractJsonSerializer和JavaScriptSerializer進行轉換,JavaScriptSerializer兼容更廣泛,且可序列化匿名類型。
三、加解密
加密分為不可逆、對稱可逆與非對稱可逆三種方式。MD5(不可逆加密)提供單向散列,輸入任意長度信息生成固定長度摘要。MD5應用包括防止信息篡改、保護隱私與數字簽名,但因破解風險,現代推薦使用更安全的加密方法。
對稱加密(如DES、AES、Blowfish)使用單一密鑰進行加密與解密,易於實現但密鑰安全需嚴格管理。C#版本DES加解密實現示例。
非對稱加密(如RSA)採用公鑰與私鑰對,確保信息只能由持有相應密鑰的雙方解密與加密。結合MD5散列演算法,實現數字簽名,確保信息未被篡改,但明文傳輸仍存在安全風險。C#版本RSA加解密實現示例。
總結,本文聚焦於.NET框架中的序列化與加密解密技術,通過代碼示例詳細介紹了BinaryFormatter、XML序列化、JSON序列化以及MD5、DES、AES、RSA等加密演算法的使用方法與應用場景,旨在為開發者提供直觀、實用的技術指南。