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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/news/673529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端架构: 脚手架的开发流程和常用框架

脚手架的开发流程 脚手架的创建 $ npm init 脚手架的开发 分包 分包是指当我们一个脚手架比较复杂的时候&#xff0c;不可能把所有的js代码全部写在一个脚手架当中势必会把它建很多的不同的模块 package&#xff0c;通常我们会把它称之为一个分包的过程会和实际的这个项目一样…

C++ STL

STL 标准模版库 STL 从广义上分为容器 算法 迭代器 容器 &#xff08;算法之间通过迭代器进行无缝链接&#xff09; STL几乎所有的代码都采用了模版类或者模版函数 STL六大组件 分别是容器 算法 迭代器 仿函数 适配器&#xff08;配接器&#xff09;空间配置器 容器 各种…

【Git版本控制 04】标签管理

目录 一、创建标签 二、查看标签 三、推送标签 四、删除标签 一、创建标签 标签tag&#xff0c;是对某次 commit 的⼀个标识&#xff0c;相当于起了⼀个别名。 相较于难以记住的 commit id &#xff0c; tag 很好的解决这个问题&#xff0c;因为 tag ⼀定要给⼀个让⼈容易…

使用ChatGpt和文心一言辅助文章创作

近期在写数字水浒系列文章&#xff0c;使用了ChatGpt和文心一言进行辅助创作&#xff0c;整体感受不错&#xff0c;提高了工作效率。 在使用过程中&#xff0c;感觉文心的中文能力更强一些&#xff0c;主要体现在&#xff1a; 1 语料库更大&#xff0c;比如对水浒传了解的更多…

Text2SQL研究-Chat2DB体验与剖析

文章目录 概要业务数据库配置Chat2DB安装设置原理剖析 小结 概要 近期笔者在做Text2SQL的研究&#xff0c;于是调研了下Chat2DB&#xff0c;基于车辆订单业务做了一些SQL生成验证&#xff0c;有了一点心得&#xff0c;和大家分享一下.&#xff1a; 业务数据库设置 基于车辆订…

C#面向对象编程:多态

面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;是一种编程范式&#xff0c;它使用“对象”来设计程序。在C#等现代编程语言中&#xff0c;面向对象编程的核心概念包括封装、继承和多态。今天&#xff0c;我们重点讨论其中的多态性。 一、多…

re:从0开始的CSS学习之路 6. 字体相关属性

1. 字体相关属性 font-size 字体大小 font-family 字体的系列&#xff08;字体簇&#xff09; 可以设置多个字体&#xff0c;每个字体之间以逗号隔开 设置多个字体的目的是为了用户尽可能的支持字体 网页字体的五大类&#xff1a; serif 衬线字体 sans-serif 非衬线字体 monos…

Linux第43步_移植ST公司uboot的第4步_uboot测试

uboot移植结束后&#xff0c;需要进行测试。 1、烧录程序 1)、将STM32MP157开发板的网络接口与路由器的网络接口通过网线连接起来。 2)、将开发板的串口和电脑通过USB线连接起来。 3)、将开发板的USB OTG接口和电脑通过USB线连接起来。 4)、将开发板上拨码开关拨到“000”…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之ScrollBar组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之ScrollBar组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、ScrollBar组件 鸿蒙&#xff08;HarmonyOS&#xff09;滚动条组件ScrollBar&…

Leetcode3020. 子集中元素的最大数量

Every day a Leetcode 题目来源&#xff1a;3020. 子集中元素的最大数量 解法1&#xff1a;哈希 枚举 用一个哈希表统计数组 nums 中的元素及其出现次数。 暴力枚举数组中的数&#xff0c;作为 x&#xff0c;然后不断看 x2,x4,⋯ 在数组中的个数。直到个数不足 2 个为止&a…

搭建macOS开发环境-1:准备工作

请记住&#xff1a; 最重要的准备工作永远是&#xff1a;备份数据 !!! 通过图形界面检查 Mac 的 CPU 类型&#xff1a; 在搭载 Apple 芯片的 Mac 电脑上&#xff0c;“关于本机”会显示一个标有“芯片”的项目并跟有相应芯片的名称&#xff1a; 通过命令行检查Mac的CPU类型 …

使用vite创建vue+ts项目,整合常用插件(scss、vue-router、pinia、axios等)和配置

一、检查node版本 指令&#xff1a;node -v 为什么要检查node版本&#xff1f; Vite 需要 Node.js 版本 18&#xff0c;20。然而&#xff0c;有些模板需要依赖更高的 Node 版本才能正常运行&#xff0c;当你的包管理器发出警告时&#xff0c;请注意升级你的 Node 版本。 二、创…

(delphi11最新学习资料) Object Pascal 学习笔记---第4章第2.4节(函数重载)

4.2.4 函数重载 ​ 有时您可能想要两个非常相似但参数和实现不同的函数。传统做法是&#xff0c;您必须为每个函数想出一个稍微不同的名称&#xff0c;但是现代编程语言允许您对一个函数符号进行多次定义。 ​ 重载的概念很简单&#xff1a;编译器允许您使用相同的名称定义两…

.[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复

导言&#xff1a; 在当今数字化时代&#xff0c;勒索病毒已成为网络安全领域的一大威胁。其中一种新近出现的勒索病毒是由[hudsonLcock.li].mkp[hendersoncock.li].mkp[myersairmail.cc].mkp制作的&#xff0c;它以其高效的加密算法和勒索方式而备受关注。本文91数据恢复将介绍…

七、Nacos源码系列:Nacos服务发现

目录 一、服务发现 二、getServices()&#xff1a;获取服务列表 2.1、获取服务列表 2.2、总结图 三、getInstances(serviceId)&#xff1a;获取服务实例列表 3.1、从缓存中获取服务信息 3.2、缓存为空&#xff0c;执行订阅服务 3.2.1、调度更新&#xff0c;往线程池中…

【Spring】Tomcat服务器部署

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Spring⛺️稳中求进&#xff0c;晒太阳 单体项目部署 本地工作 项目在本地开发完毕之后进行一些必要参数的修改。 比如&#xff1a; 数据库的JDBC的配置文件&#xff0c;还有前端页面的…

项目02《游戏-06-开发》Unity3D

基于 项目02《游戏-05-开发》Unity3D &#xff0c; 接下来做 背包系统的 存储框架 &#xff0c; 首先了解静态数据 与 动态数据&#xff0c;静态代表不变的数据&#xff0c;比如下图武器Icon&#xff0c; 其中&#xff0c;武器的名称&#xff0c;描述&#xff…

Swift Combine 发布者publisher的生命周期 从入门到精通四

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三 1. 发布者和订阅者的生命周期 订阅者和发布者以明确定义的顺序进行通信&#xff0c;因此使得它们具有从开始到结束的生命周期&#xff1a; …

课时17:本地变量_命令变量

2.2.3 命令变量 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 基本格式 定义方式一&#xff1a;变量名命令注意&#xff1a; 是反引号定义方式二&#xff1a;变量名$(命令)执行流程&#xff1a;1、执行 或者 $() 范围内的命令…

安卓——计算器应用(Java)

步骤 1: 设置Android Studio项目 创建一个新的Android项目&#xff0c;选择Java作为编程语言。 步骤 2: 设计用户界面 打开activity_main.xml文件&#xff0c;在res/layout目录下&#xff0c;设计你的计算器用户界面。这个例子使用了LinearLayout来排列两个EditText输入框和…