网络安全——SpringBoot配置文件明文加密
一、前言
在日常开发中,项目中会有很多配置文件。比如SpringBoot项目核心的数据库配置、Redis账号密码配置都在properties、yml配置文件
中。 如果这些信息以明文的方式存储,你的电脑被拿去修理,就会容易泄露,一旦被其他人获取到……你懂得…… 那么如何将配置文件
中的明文信息加密存储就变得至关重要,让我们一起来看下吧。
二、加密方式介绍
你想给你的兄弟分享你的考验资料,为了保证安全性,你选择使用加密。
为了保证安全性不能让人随便看到,是首先使用对称加密。你给它设置一个了密码。但是你在发送过程中内容被隔壁张三截获,在你告知
你兄弟密码的过程,又被截获,然后……你的考验资料泄露…
你被你兄弟臭骂了一顿,你灵机一动使用了另外一种方式:非对称加密。首先你让兄弟准备两把钥匙,自己留一把,然后另一把传输给你
使用它内容加密,最后再把加密的内容传输给你兄弟。这过程无论是钥匙还是加密内容都不担心被截获,因为只有你兄弟手中的那把钥匙
才能解密。你兄弟安全的收到考验资料,并没有泄露。你以为这种方式却对的安全,可以高枕无忧了……
但是有天你的兄弟背叛了你,把你的考验资料公之于众!
此时你才恍然大悟,这世界上根本没有绝对安全的加密方式!再可靠的加密,也挡不住捉摸不透的人心! 所以你决定,将考验资料永久
封存!你选择了哈希加密这种方式,它只管加密,不管解密!
(1)对称加密:
对称加密就相当于一个带锁宝箱,这个钥匙就是密钥(或者被称为盐值)。如果你想让别人想看的话,必须把钥匙给对应的人。这是最常
见的、最方便的加密方式。常见的对称加密算法包括 DES、3DES、AES。
优点:
- 强度和速度: 对称加密的优点是速度快,适用于大量数据的加密和解密。
缺点:
秘钥管理: 对称加密的关键在于密钥的管理。为了确保安全性,密钥必须在发送者和接收者之间安全地共享。但是,如果共享又是
一个问题,密钥一旦泄露,安全防线被攻陷,这又是个问题!。
(2)非对称加密:
你手中的钥匙被称为公钥,用来把宝箱锁上。你兄弟手中的钥匙被称为私钥,要想打开宝箱,必须要有对应的私钥才行!
优点:
- 安全性: 非对称加密提供了更高的安全性,因为私钥是保密的,只有拥有私钥的人可以解密密文。
- 密钥交换: 非对称加密可以用于安全地交换对称加密的密钥,从而解决了对称加密中秘钥分发的问题。
缺点:
- 性能: 非对称加密通常比对称加密慢得多,因为涉及复杂的数学运算。
- 复杂性: 使用非对称加密需要更多的计算资源和算法支持。
(3)哈希函数:
哈希函数主要用于数据完整性验证、密码存储、数字签名等。但是,由于哈希函数的单向性质,不能直接用于加密解密。
优点:
- 不可逆性: 哈希函数是不可逆的,即无法从哈希值还原出原始数据,这增加了数据的安全性,特别适用于密码存储等场景。
- 高效性: 哈希函数通常非常快速,对于大量数据的处理非常高效。
- 固定长度输出: 无论输入数据的大小如何,哈希函数的输出长度是固定的,这使得处理结果更加一致。
- 散列均匀性: 好的哈希函数应该将不同的输入映射到均匀分布的输出空间,避免冲突。
- 数据完整性验证: 通过比较原始数据和哈希值,可以验证数据是否在传输或存储过程中被篡改。
缺点:
不可恢复性: 由于哈希函数是不可逆的,一旦数据被哈希化,就无法从哈希值还原出原始数据。这在某些应用场景下可能是缺点,
比如需要解密数据的情况。
冲突可能性: 哈希函数的输出是有限的,因此不同的输入可能会产生相同的哈希值,这被称为冲突。虽然好的哈希函数会减小冲突
的可能性,但仍然需要考虑。
彩虹表攻击: 针对较弱的哈希函数,攻击者可能使用预先计算的彩虹表来找到哈希值的原始数据。
哈希碰撞: 哈希碰撞指的是两个不同的输入产生相同的哈希值,攻击者可能利用这种情况来实现欺骗或篡改。
性能问题: 对于某些哈希函数,特别是在大规模数据上运行时,计算哈希值可能会影响性能。
三、SpringBoot项目配置文件加密
通过上面的加密方式介绍,我们使用对称加密,有人可能问这样不是不安全嘛?其实是安全的,得看你怎么用!
3.1 引入依赖(XTHS:第一步)
| 1 2 3 4 5 6 7 8 9 10 |
|
3.2 编写加密工具(XTHS:第二步)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
|
3.3 加密配置类(XTHS:第三步)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
3.4 配置文件(XTHS:第四步)
需要加密的内容使用:ENC(密码)格式书写。ENC 是一个特殊的前缀,用于标识被加密过的字符串。当你在配置文件中使用 ENC 前缀时,Jasypt 会自动识别这是一个被加密的属性,然后在应用启动时解密它并将解密后的值应用于相应的配置属性。这允许你在配置文件中以加密的方式存储敏感信息(如密码),同时在应用中解密并使用这些值。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
3.5 更安全一些
上面我们是把密钥写在了代码中,这样做也是有些不太安全的。我们可以使用命令行的方式将密钥传入。
在配置文件中加上如下的配置,用于接收启动项目时传入的配置参数:
| 1 2 3 |
|
| 1 |
|
生成密文时,我们也可以不适用工具类,而是使用命令,步骤如下:

-
在此目录下,打开命令行(
win + R-> 进入jar包所在目录)、或者git(在jar包所在目录->邮件打开Git Bash here),执行加密命令: - 加密:
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="要加密的值" password="加密密码" algorithm="加密算法"
| 1 |
|

- 解密:
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="加密后的值" password="加密密码" algorithm="加密算法"
| 1 |
|

相关文章:
网络安全——SpringBoot配置文件明文加密
一、前言 在日常开发中,项目中会有很多配置文件。比如SpringBoot项目核心的数据库配置、Redis账号密码配置都在properties、yml配置文件 中。 如果这些信息以明文的方式存储,你的电脑被拿去修理,就会容易泄露,一旦被其他人获取到…...
LightRAG开源了…结合本地ollama实现股票数据接口Akshare智能问答
LightRAG是由香港大学研究团队推出的一种检索增强生成(Retrieval-Augmented Generation, RAG)系统。该系统通过整合图结构索引和双层检索机制,显著提升了大型语言模型在信息检索中的准确性和效率。LightRAG 不仅能够捕捉实体间的复杂依赖关系…...
【PCB设计】AD16教程:分配位号
1、前提条件 确保已经基本画完原理图 2、点击【Tools-Annotate Schematics】 3、依次点击【Reset All】、【Update Changes Lise】、【Close】 最后位号就被自动分配好了...
ElasticSearch7.x入门教程之索引概念和基础操作(三)
文章目录 前言一、索引基本概念二、索引基本使用elasticsearch-head插件Kibana使用 总结 前言 要想熟悉使用ES的索引,则必须理解索引相关的概念,尤其是在工作当中。 在此记录,方便开展工作。 一、索引基本概念 尽量以通俗的话语。 1、集群…...
Python后端flask框架接收zip压缩包方法
一、用base64编码发送,以及接收 import base64 import io import zipfile from flask import request, jsonifydef unzip_and_find_png(zip_data):# 使用 BytesIO 在内存中处理 zip 数据with zipfile.ZipFile(io.BytesIO(zip_data), r) as zip_ref:extracted_paths…...
机器学习中数据集Upsampling和Downsampling是什么意思?中英文介绍
对GPT4o大模型的Prompt如下: Datasets marked with ↓ are downsampled from their original datasets, datasets marked with ↑ are upsampled.这里的上采样和下采样是什么意思 内容援引自:paper (https://allenai.org/papers/tulu-3-repor…...
浏览器控制台中使用ajax下载文件(没有postman等情况下)
有时候,可能电脑里面没有postman(比如内网),然后又需要导出一些文件,前端又没有提供相应的功能(比如循环调用导出等),这时候我们就可以通过在控制台写代码的方式来实现了。这个还是在…...
完全二叉树的基本操作(顺序存储)
#include<iostream> #include<math.h> using namespace std;#define MaxSize 100 struct TreeNode {int value;bool isEmpty;//判断该节点是否为空 }t[MaxSize];/** *定义一个长度位MaxSize的数组,按照从上到下, *从左到右的方式依次存储完全…...
【HTTP】http与https
http与https的关系 应用层协议: http(HyperText Transfer Protocol)超文本传输协议; https(Hypertext Transfer Protocol Secure)超文本传输安全协议; 传输层协议:TCP(Tr…...
【Git多人开发与协作之团队的环境搭建】
Git多人开发与协作之团队的环境搭建 新的改变1. Git 的用途2. 分支的概念与类型3. HEAD 和分支指针如何查看 HEAD 指向的位置: 4. 常见的 Git 操作5. 常见问题与解决方法总结GitHub 项目获取实操在新电脑上运行 Git1. 安装 Git2. 配置用户名和邮箱3.配置 Git 和 SSH…...
java基础概念36:正则表达式1
一、正则表达式的作用 作用一:校验字符串是否满足规则;作用二:在一段文本中查找满足要求的内容。——爬虫 二、正则表达式 2-1、字符类 示例: public static void main(String[] args) {System.out.println("a".matc…...
java实现小程序接口返回Base64图片
文章目录 引言I java 接口返回Base64图片接口设计获取验证码图片-base64字符串获取验证码图片-二进制流arraybufferII 小程序端代码过期代码: 显示文件流图片(arraybuffer)知识扩展:微信小程序下载后端返回的文件流引言 场景: 图形验证码 背景: 接口返回arraybuffer的格式…...
网络编程并发服务器的应用
作业2:完成局域网CS模型,局域网内一个服务器,多个客户端连接一个服务器,完成局域网聊天(select函数,poll函数,完成TCP并发服务器)。 poll函数应用: 服务器部分代码&…...
数据结构——停车场管理问题
目录 1、问题描述2、逐步分析1)涉及操作2)代码实现 3、代码整合 1、问题描述 1、题目 设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列&#x…...
道品智能科技移动式水肥一体机:农业灌溉施肥的革新之选
在现代农业的发展进程中,科技的力量正日益凸显。其中,移动式水肥一体机以其独特的可移动性、智能化以及实现水肥一体化的卓越性能,成为了农业领域的一颗璀璨新星。它不仅改变了传统的农业灌溉施肥方式,更为农业生产带来了高效、精…...
AI实习--常用的Linux命令
一、基础命令 1. 切换到根目录。 cd ~ 2. 返回上一级目录。 cd .. 3. 查看当前目录下包括哪些文件和文件夹。 ls 4. 查看当前路径。 pwd 5. 将文件或文件夹剪切到目标目录下。 mv 文件所在路径 目标路径 6. 查看文本文件内容。 cat 文本文件名 7. 创建文件或文件夹…...
Python学习指南 + 谷歌浏览器如何安装插件
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: Python 目录 前言 Python 官方文档的使用 谷歌浏览器中如何安装插件 前言 在学习Python时,我们可能会出现这样的困惑&#x…...
研0找实习【学nlp】15---我的后续,总结(暂时性完结)
当下进展成果: nlptransformerpytorchhuggingfacebert简历环境配置表情识别文本分类 断更了快1个月,2个礼拜找实习,1个礼拜伤心,1个礼拜想我要干什么…… 承认自己的才疏学浅,了解了leetcode,和老师商量了…...
kylin麒麟银河桌面版操作系统安装部署
本文主要描述kylin麒麟银河桌面版操作系统的安装,该操作系统的安装源文件可以从kylin麒麟银河官方网站上下载,商业版本需要申请试用,开源版本可以直接下载使用。 如上所示,x86芯片处理器架构的请下载INTEL版本,华为海思…...
MyBatis插件原理及应用
🎮 作者主页:点击 🎁 完整专栏和代码:点击 🏡 博客主页:点击 文章目录 介绍<plugins>标签解析拦截器链的工作原理插件的应用场景MyBatis插件应用的四个组件InterceptorChain和Interceptor MyBatis框架…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...
算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...
归并排序:分治思想的高效排序
目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法,由约翰冯诺伊曼在1945年提出。其核心思想包括: 分割(Divide):将待排序数组递归地分成两个子…...
麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...
C++中vector类型的介绍和使用
文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...
