网络安全——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框架…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
