对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等加密算法的使用方法与应用场景,旨在为开发者提供直观、实用的技术指南。