当前位置: 首页 > news >正文

Springboot项目报文加密(AES、RSA、Filter动态加密)

Springboot项目报文加密(AES、RSA、Filter动态加密)

  • 一、痛点
    • 1.1、初版报文加密
  • 二、前期准备
    • 2.1、AES加密
    • 2.2、RSA加密
    • 2.3、国密算法概述
    • 2.4、国密SM2
    • 2.5、国密SM3
    • 2.6、国密SM4
    • 2.7、JAVA中的拦截器、过滤器
    • 2.8、请求过滤器
    • 2.9、响应过滤器
    • 2.10、登录验证码
    • 2.11、BCrypt非对称加密
  • 三、逻辑整理
    • 3.1、建立前后端连接
    • 3.2、登录接口特殊处理
    • 3.3、接口加解密模式
    • 3.4、模式逻辑说明
  • 四、关键代码
    • 4.1、会话通知
    • 4.2、登录
    • 4.3、接口处理
  • 五、接口样例
    • 5.1、会话通知
    • 5.2、登录
    • 5.3、普通接口
    • 5.4、导入接口
    • 5.5、导出接口
  • 六、其他

最近一直在处理加密相关问题,对秘钥进行复杂化处理、进程非固定化逻辑处理,等等一些简单处理方式,还是解决不了cookie存储秘钥等问题。
于是在原有方式上进行了改进,优化了加密的模式来改进这一问题。
目的是减少前端存储固定秘钥不安全等带来的一系列问题。

一、痛点

在项目加密环节,如仅采用秘钥加密,一但秘钥泄露,那每一次的会话及请求的报文,则无异于暴露在外,存在安全隐患。

1.1、初版报文加密

阅读本篇博客前建议先阅读初版内容:
Springboot项目报文加密(采用AES、RSA动态加密策略):https://blog.csdn.net/qq_38254635/article/details/129275971

二、前期准备

在处理该问题前,需先了解一些加密,如AES、RSA,国密SM2、SM3、SM4,Filter等。

2.1、AES加密

AES加密:https://blog.csdn.net/qq_38254635/article/details/129622075

2.2、RSA加密

RSA加密:https://blog.csdn.net/qq_38254635/article/details/129623413

2.3、国密算法概述

国密:https://blog.csdn.net/qq_38254635/article/details/131801527

2.4、国密SM2

国密SM2:https://blog.csdn.net/qq_38254635/article/details/131810661

2.5、国密SM3

国密SM3:https://blog.csdn.net/qq_38254635/article/details/131810696

2.6、国密SM4

国密SM4:https://blog.csdn.net/qq_38254635/article/details/131810715

2.7、JAVA中的拦截器、过滤器

JAVA中的拦截器、过滤器:https://blog.csdn.net/qq_38254635/article/details/131201519

2.8、请求过滤器

请求过滤器:https://blog.csdn.net/qq_38254635/article/details/136041159

2.9、响应过滤器

响应过滤器:https://blog.csdn.net/qq_38254635/article/details/136041183

以及登录相关内容:

2.10、登录验证码

登录验证码:https://blog.csdn.net/qq_38254635/article/details/129735679

2.11、BCrypt非对称加密

BCrypt非对称加密:https://blog.csdn.net/qq_38254635/article/details/129746320

三、逻辑整理

3.1、建立前后端连接

前端发送通知,告诉后端需要建立连接请求。

在这里插入图片描述

3.2、登录接口特殊处理

区别登录接口与其他接口。

在这里插入图片描述

3.3、接口加解密模式

接口加解密模式。
在这里插入图片描述

3.4、模式逻辑说明

此模式, Web端 仅需存储 RSA公钥 Server端 仅需存储 RSA私钥

每次开始:

Web端 随机生成 AES秘钥 ,并将 报文 采用 AES秘钥 加密得到 webCipherText ,且将 AES秘钥 采用 RSA公钥 加密得到 cipherKey ,将两个参数传给 Server端

Server端 采用 RSA私钥 解密 cipherKey 得到 AES秘钥 ,再用 AES秘钥 解密 webCipherText 得到 报文

Server端 进行业务逻辑处理。

Server端 将返回的 报文 采用 AES秘钥 加密得到 ServerCipherText ,返回给 Web端

Web端 采用 AES秘钥 解密 ServerCipherText 得到 报文

请求结束。

四、关键代码

4.1、会话通知

会话通知:生成秘钥对,后端Redis及session存储

public Map<String, String> notice() throws Exception{String uk = UniqueUtil.getUniqueKey();Map<String, String> keyPair = RSAUtils.generateKeyPair();RedisUtil redisUtil = SpringContextUtils.getBean(RedisUtil.class);redisUtil.hPutObject(EncryptEnum.Redis.RSA_PATH + uk, EncryptEnum.Redis.RSA_KEY, keyPair

相关文章:

  • 【开源】SpringBoot框架开发天沐瑜伽馆管理系统
  • MongoDB聚合:$listSampledQueries
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • 【C语言】assert断言:保护程序的利器
  • 车载电子电器架构 —— 电子电气系统车载功能子系统
  • 【漏洞复现】多语言药房管理系统MPMS文件上传漏洞
  • 2024-02-11 Unity 编辑器开发之编辑器拓展2 —— 自定义窗口
  • mxxWechatBot基本配置
  • .NetCore 如何动态路由
  • leetcode链表相关题目
  • 树状菜单(利用映射-bootstrap+jQuery实现折叠功能)
  • 单片机学习笔记---蜂鸣器播放提示音音乐(天空之城)
  • Unity2D 学习笔记 0.Unity需要记住的常用知识
  • Vue中路由的使用
  • MyBatisPlus之分页查询及Service接口运用
  • Angular数据绑定机制
  • JavaScript设计模式系列一:工厂模式
  • Java超时控制的实现
  • Mysql优化
  • Python 基础起步 (十) 什么叫函数?
  • React 快速上手 - 07 前端路由 react-router
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 阿里研究院入选中国企业智库系统影响力榜
  • 从重复到重用
  • 代理模式
  • 分享一份非常强势的Android面试题
  • 给新手的新浪微博 SDK 集成教程【一】
  • 关于Java中分层中遇到的一些问题
  • 开源地图数据可视化库——mapnik
  • 如何使用 JavaScript 解析 URL
  • 深度学习在携程攻略社区的应用
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #### go map 底层结构 ####
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • ${factoryList }后面有空格不影响
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (done) 两个矩阵 “相似” 是什么意思?
  • (八)Flask之app.route装饰器函数的参数
  • (二)springcloud实战之config配置中心
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)linux文件内容查看
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .net Stream篇(六)
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET关于 跳过SSL中遇到的问题
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET开源项目介绍及资源推荐:数据持久层
  • .net流程开发平台的一些难点(1)
  • .net中我喜欢的两种验证码
  • [C#]科学计数法(scientific notation)显示为正常数字