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

​Spring Boot 配置文件敏感信息加密:Jasypt 实战

​​

目录

​​

​1. 为什么需要加密配置文件?​​

​2. Jasypt 快速集成​

​2.1 在xml文件中添加 Maven 依赖​

​2.2 生成加密字符串​​

​编辑

​编辑

​3. 安全最佳实践​

​4. 常见问题​

​Q1:加密后启动报错?​​

​Q2:加密算法如何选择?​​

​5. 总结​


1. 为什么需要加密配置文件?​

在 Spring Boot 项目中,敏感信息(如数据库密码、API Key、Redis 密码等)通常直接写在 application.propertiesapplication.yml 中(如下图所示),存在以下风险:

  • 代码泄露​:配置文件可能被上传到 Git,导致密码暴露。
  • 运维风险​:服务器被入侵时,攻击者可直接读取明文密码。
  • 合规性要求​:部分行业(如金融、医疗)强制要求加密存储敏感信息。

解决方案​:使用 ​Jasypt​(Java Simplified Encryption)对敏感信息加密,运行时自动解密,兼顾安全与便捷。


2. Jasypt 快速集成

2.1 在xml文件中添加 Maven 依赖

<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.5</version>
</dependency>

2.2 生成加密字符串​​

那他是如何进行加密解密的呢?然我们进入这个组件的源码(加密部分):

input是你要输入的内容,后面的password是密钥,用于给上面inport的内容解密

我们来看一下下面optional的内容,我们有什么可以选择的呢?

解密部分:

那么我们如何去使用这样的一个工具呢?

在命令行中输入:

java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="root" password=huihui algorithm=PBEWithMD5AndDES

执行这条命令之后:password的内容就是我们指定的密钥

将output的内容拷下。接着加入到yml配置文件当中,我们在将root改为我们加密后的内容需要用ENC封装:

    username: ENC(ugBjFufNHYJiS+kbJG1Uvg==) //ENC括号的内容表示这是加密后的内容

接着,我们用同样的方式加密我们的密码,内容都是一样的,只是input的内容不一样:

我们现在已经完成了加密的部分,剩下的就是整个项目需要通过我加密的内容获取其真实的内容,这样,他才可以去访问到数据,那么现在有两种方式去解密:

方式一:在yml配置文件里面配置好密钥

jasypt:encryptor:password: huihui  # 必须与加密时使用的password参数一致algorithm: PBEWithMD5AndDES  # 必须与加密时使用的algorithm参数一致iv-generator-classname: org.jasypt.iv.NoIvGenerator# 注意:PBEWithMD5AndDES是较旧算法,演示环境下没有问题# 建议升级到更安全的算法如PBEWithHMACSHA512AndAES_256

然后再在启动文件处(一般是…Application)加入@EnableEncryptableProperties注解表示开启密码解析。接着再去启动整个应用:

数据库数据正确查出。

但是!!!

此时,你的密钥就写在yml配置文件中,等于把要是直接给了其他人,让没有权限的人也可以登陆获取数据,所以这种方式很不安全。那么,我们开始另外一种方式。

方式二:我们手动的在项目启动的时候手动加一个动态参数

//加入的分别是以下冒号后面的内容
Name: JASYPT_ENCRYPTOR_PASSWORD  
Value: huihuiName: JASYPT_ENCRYPTOR_ALGORITHM  
Value: PBEWithMD5AndDES

接着,yml文件也应该相应的改变:

jasypt:encryptor:password: ${JASYPT_ENCRYPTOR_PASSWORD:}  # 从环境变量读取algorithm: ${JASYPT_ENCRYPTOR_ALGORITHM:PBEWithMD5AndDES}  # 默认算法iv-generator-classname: org.jasypt.iv.NoIvGenerator  # MD5AndDES必须禁用IV


数据访问成功!!!


​3. 安全最佳实践

  1. 密钥管理​:
    • 生产环境务必使用环境变量或云服务(如 AWS KMS)。
    • 禁止将密钥提交到 Git。
  2. 密钥轮换​:
    定期更换加密密钥,并重新加密所有配置。
  3. 日志脱敏​:
    避免敏感信息打印到日志(配置 logback.xml 过滤 ENC(*))。
  4. 最小权限​:
    仅允许必要服务访问密钥。

​4. 常见问题

Q1:加密后启动报错?​

  • 检查密钥是否一致。
  • 确认依赖版本无冲突(Spring Boot 2.x 用 jasypt-spring-boot-starter 3.x)。

Q2:加密算法如何选择?​

  • 默认 PBEWithMD5AndDES 已不安全,建议 PBEWithHMACSHA512AndAES_256

​5. 总结

通过 Jasypt 可以低成本实现 Spring Boot 配置文件的敏感信息加密,关键步骤:

  1. 引入依赖​:jasypt-spring-boot-starter
  2. 加密数据​:用命令行或代码生成 ENC(密文)
  3. 安全存储密钥​:优先用环境变量或启动参数。

相关文章:

​Spring Boot 配置文件敏感信息加密:Jasypt 实战

​​ 目录 ​​ ​1. 为什么需要加密配置文件&#xff1f;​​ ​2. Jasypt 快速集成​ ​2.1 在xml文件中添加 Maven 依赖​ ​2.2 生成加密字符串​​ ​编辑 ​编辑 ​3. 安全最佳实践​ ​4. 常见问题​ ​Q1&#xff1a;加密后启动报错&#xff1f;​​ ​Q2&…...

c++STL-vector的模拟实现

cSTL-vector的模拟实现 vector的模拟实现基本信息构造函数析构函数返回容量&#xff08;capacity&#xff09;返回元素个数&#xff08;size&#xff09;扩容&#xff08;reserve和resize&#xff09;访问&#xff08;[]&#xff09;迭代器&#xff08;**iterator**&#xff09…...

【Python 变量类型】

Python 是一种动态类型语言&#xff0c;变量类型在运行时自动确定&#xff0c;无需显式声明。以下是 Python 中核心变量类型的分类与用法详解&#xff1a; 一、基本数据类型 1. 数值类型 整数 (int) 支持正负数、零和二进制/八进制/十六进制表示&#xff1a; a 42 b 0o52 #…...

2.2 微积分的解释

第一阶段&#xff1a;曲直转化的数学革命 原始困境&#xff1a; 几何局限&#xff1a;古希腊几何仅能计算矩形/三角形等直线图形面积现实需求&#xff1a;17世纪弹道轨迹、行星轨道等曲线相关计算需求激增关键矛盾&#xff1a;直线数学工具&#xff08;如毕达哥拉斯定理&…...

如何使用Selenium?

Selenium 是一个用于 Web 自动化测试 的开源工具套件&#xff0c;支持多种浏览器和编程语言。它最初是为测试 Web 应用而设计&#xff0c;但也被广泛用于 网页数据抓取 和 自动化操作。 Selenium 的核心组件 Selenium WebDriver 直接控制浏览器&#xff0c;模拟用户操作&…...

SVN 中文路径访问报错(权限已正确分配)

问题&#xff1a;SVN 中文路径访问报错&#xff08;权限已正确分配&#xff09; 原因&#xff1a; 1、URL特殊字符未转义 路径中包含空格、中文括号()等特殊符号&#xff0c;未进行URL编码 中文括号()示例&#xff1a;(设计)需转为%28%E8%AE%BE%E8%AE%A1%29&#xff0c;空格需…...

【Python 基础语法】

Python 基础语法是编程的基石&#xff0c;以下从核心要素到实用技巧进行系统梳理&#xff1a; 一、代码结构规范 缩进规则 使用4个空格缩进&#xff08;PEP 8标准&#xff09;缩进定义代码块&#xff08;如函数、循环、条件语句&#xff09; def greet(name):if name: # 正确缩…...

讲讲git 和svn

讲讲git 和svn 目录Git到底是什么&#xff1f;它该怎末用&#xff1f;核心概念基础操作1. 仓库的创建2. 文件的提交工作流程3. 分支管理4. 远程仓库操作 进阶操作实际应用建议**基本用法****常用命令的帮助示例****帮助文档的结构****替代方法****练习建议****核心概念****与Gi…...

运用数组和矩阵对数据进行存取和运算——NumPy模块 之四

目录 NumPy模块介绍 3.4 NumPy 数组重塑与转置 3.4.1 操作机制的理论逻辑 3.4.2 一维数组的重塑 3.4.3 多维数组的重塑 3.4.4 数组的转置操作 3.4.5 知识点总结与课程回顾 3.4.6 课后练习题 NumPy模块介绍 NumPy 是 Python 科学计算领域的重要基石&#xff0c;与当前 “躺吃旅行…...

机器学习第六讲:向量/矩阵 → 数据表格的数学表达,如Excel表格转数字阵列

机器学习第六讲&#xff1a;向量/矩阵 → 数据表格的数学表达&#xff0c;如Excel表格转数字阵列 资料取自《零基础学机器学习》。 查看总目录&#xff1a;学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章&#xff1a;DeepSeek R1本地与线上满血版部署&#xff1a;…...

服务器多JAR程序运行与管理指南

在同一台服务器上同时运行多个JAR程序是完全可以的&#xff0c;但需要注意以下几点以确保稳定性和性能&#xff1a; 关键注意事项 端口冲突 如果JAR程序是网络服务&#xff08;如Web应用&#xff09;&#xff0c;确保每个程序监听不同的端口&#xff08;例如&#xff1a;8080、…...

vue实现进度条带指针

效果最终 function calculatePointerPosition(value) {if (value < 2.6) return 12.5; // 非常差位置if (value < 5.1) return 37.5; // 较差位置if (value < 7.1) return 62.5; // 良好位置return 90; // 非常满意位置 }function getStatusText(value) {if (valu…...

【C++】智能指针

前言 上文我们学到了C11的异常&#xff0c;了解到了C与C语言处理错误的区别&#xff0c;异常的特点在于抛出与接收。【C11】异常-CSDN博客 本文我们来学习C中的下一个功能&#xff1a;智能指针 1.智能指针的使用场景 在上文我们知道了抛异常的知识&#xff0c;抛异常的“抛”这…...

Adobe Acrobat pro在一份PDF中插入空白页

在Adobe Acrobat pro中先打开我们的PDF文件&#xff1b; 用鼠标点击需要插入空白页处的上一页&#xff1b; 然后如下图操作&#xff1a; 默认会在光标处的下一页插入一张空白页&#xff0c;你也可以修改插入页的页码或者向前一页插入...

Oracle adg环境下调整redo日志组以及standby日志组大小

1.在adg环境中&#xff0c;调整redo日志组大小以及standby日志组大小主要思路如下&#xff1a; a、先备库增加standby redo 删除老standby redo, b、然后主库增加redo删除老redo, c、备库增加新redo删除老redo, d、最后主库增加standby redo。 #主库 [oracleDB196 ~]$ sql / a…...

Nlog适配达梦数据库进行日志插入

前言 原来使用的是SQLServer数据库&#xff0c;使用Nlog很流畅&#xff0c;没有什么问题。现在有个新项目需要使用麒麟操作系统和达梦数据库&#xff0c;业务流程开发完成之后发现Nlog配置文件中把数据库连接内容修改之后不能执行插入操作。 原Nlog.config配置 <?xml ve…...

记一次redis未授权被种挖矿

#挖矿程序 /etc/httpgd /etc/nnt.sh #大小问 #定时任务名为root /var/spool/cron/root 内容&#xff1a;*/50 * * * * sh /etc/nnt.sh >/dev/null 2>&1 定时任务只有所有者可以写&#xff0c;且chmod修改权限失败。 #先查看定时任务的拓展属性&#xff0c;不可变(i…...

Docker私有仓库实战:官方registry镜像实战应用

抱歉抱歉&#xff0c;离职后反而更忙了&#xff0c;拖了好久&#xff0c;从4月拖到现在&#xff0c;在学习企业级方案Harbor之前&#xff0c;我们先学习下官方方案registry&#xff0c;话不多说&#xff0c;详情见下文。 注意&#xff1a;下文省略了基本认证 TLS加密&#xff…...

LeetCode 热题 100_只出现一次的数字(96_136_简单_C++)(哈希表;哈希集合;排序+遍历;位运算)

LeetCode 热题 100_只出现一次的数字&#xff08;96_136_简单_C&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;哈希表&#xff09;&#xff1a;思路二&#xff08;哈希集合&#xff09;&#xff1a;思路三…...

基于FastAPI框架的日志模块设计

以下是一个基于FastAPI框架设计的日志模块&#xff0c;结合SQLite数据库实现增删改查功能的完整实现方案&#xff1a; 1. 项目结构 your_project/ ├── app/ │ ├── logs/ # 日志模块目录 │ │ ├── models.py # 数据库模型定义 │ │ …...

网页禁止粘贴的解决方法(以学习通网页为例)

网页禁止粘贴的解决方法&#xff08;以学习通网页为例&#xff09; 学数据挖掘&#xff0c;学习通过作业的简答题要英文做答还竟然不能复制粘贴&#xff0c;受不了了 下面给出解决办法 1.想着是网页JS的问题&#xff0c;既然不能直接粘贴&#xff0c;那就在源码里面修改 2.于…...

Linux常用命令详解(下):打包压缩、文本编辑与查找命令

一、打包压缩命令 在Linux系统中&#xff0c;打包与压缩是文件管理的核心操作之一。不同的工具适用于不同场景&#xff0c;以下是最常用的命令详解&#xff1a; 1. tar命令 作用&#xff1a;对文件进行打包、解包、压缩、解压。 语法&#xff1a; tar [选项] [压缩包名] […...

前端面经 计网 http和https区别

HTTP 超文本传输 忒点&#xff1a; 支持CS 客户/服务器模式 方便快捷 简单 允许传输任意类型的数据 在报文头中的Content-Type中声明 无连接&#xff0c;一次连接仅处理一个请求 无状态 不保留上一次的状态 HTTPS 解决HTTP明文传输 在HTTP基础上增加SSL协议 HTTP版本 …...

mac一键安装gpt-sovit教程中,homebrew卡住不动的问题

mac一键安装gpt-sovit教程 仅作为安装过程中解决homebrew卡住问题的记录 资源地址 https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/znoph9dtetg437xb#mlAoP 下载一键包 下载后并解压&#xff0c;找到install for mac.sh&#xff0c;终端执行bash空格拖拽in…...

05_jdk8新特性

文章目录 一、jdk8新特性1. Lambda表达式2. Stream API3. 函数式接口4. 默认方法5. 方法引用6. 新的日期和时间API7. Optional类8. 并发增强 二、常用函数式接口1. Supplier<T>2. Consumer<T>3. Function<T,R>4. Predicate<T> 一、jdk8新特性 JDK 8&a…...

解决IDEA Maven编译时@spring.profiles.active@没有替换成具体环境变量的问题

如果不加filtering true&#xff0c;编译后的文件还是 spring.profiles.active 编译前的application.yml 编译后的application.yml【环境变量没有改变】 解决方案 找到 SpringBoot 启动类所在的pom.xml&#xff0c;在 resources 增加 filtering true&#xff0c;然后重新…...

HTML17:表单初级验证

表单初级验证 常用方式 placeholder 提示信息 <p>名字:<input type"text" name"username" maxlength"8" size"30" placeholder"请输入用户名"></p>required 非空判断 <p>名字:<input type"…...

vue3+dhtmlx-gantt实现甘特图展示

最终效果 数据源demo {"data": [{"actual_end_date": "2025-04-23","actual_start_date": "2025-04-15","duration": 10,"end_date": "2025-05-01","id": "2|jvUiek",&…...

Jupyter-AI Pandas-AI本地使用功能优化

引言 Jupyter-ai 和 Pandas-ai 的优化主要是个人工作遇到的需求,个人觉得是一个不错的体验优化,所以进行分享仅供参考,不喜勿喷,共同进步!Jupyter-AI优化主要包含以下方向(当前已实现): Jupyter-AI中 Chat 扩展和 NoteBook 的 Cell 工作去部分,使用的Language Model 和 …...

Model.eval() 与 torch.no_grad() PyTorch 中的区别与应用

Model.eval() 与 torch.no_grad(): PyTorch 中的区别与应用 在 PyTorch 深度学习框架中&#xff0c;model.eval() 和 torch.no_grad() 是两个在模型推理&#xff08;inference&#xff09;阶段经常用到的函数&#xff0c;它们各自有着独特的功能和应用场景。本文将详细解析这两…...

mac M2下的centos8:java和jenkins版本匹配,插件安装问题

java和jenkins版本匹配如下&#xff1a; Java Support Policy 如果版本不匹配&#xff0c;jenkins无法正常启动&#xff0c;插件也无法安装成功。 实际操作过程发现&#xff1a;表格也并不全然正确&#xff0c;还是需要特定的版本才能正常 参考如下&#xff1a; jenkins安装…...

PyTorch 中的 Autograd 实现细节解析和应用

摘要: 本文深入探讨 PyTorch 框架的核心组件之一——Autograd 机制。我们将解析其内部工作原理,包括计算图的构建、梯度的计算与传播,并探讨其在神经网络训练、模型调试及可解释性等方面的广泛应用。 通过理解 Autograd 的实现细节,开发者可以更高效地利用 PyTorch 进行深度…...

【AI提示词】波特五力模型专家

提示说明 具备深入对企业竞争环境分析能力的专业人士。 提示词 # Role:波特五力模型专家## Profile - language:中文 - description:具备深入对企业竞争环境分析能力的专业人士 - background:熟悉经济学基础理论&#xff0c;擅长用五力模型分析行业竞争 - personality…...

python 的 ​uv、pip​ 和 ​conda​ 对比和技术选型

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…...

《Python星球日记》 第63天:文本方向综合项目(新闻分类)

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、项目需求分析1. 项目背景与目标2. 功能需求3. 技术方案概述 二、数据清洗与…...

面试题:请解释Java中的设计模式,并举例说明单例模式(Singleton Pattern)的实现方式

Java中的设计模式 设计模式是在软件开发过程中针对特定场景而使用的通用解决方案。设计模式可以帮助开发者编写出更加清晰、灵活和可维护的代码。设计模式分为三大类&#xff1a; 创建型模式&#xff1a;用于对象的创建过程&#xff0c;如单例模式、工厂模式、建造者模式等。…...

MySQL全量、增量备份与恢复

目录 一&#xff1a;MySQL数据库备份概述 1.数据备份的重要性 2.数据库备份类型 2.1从物理与逻辑的角度分类 物理备份 逻辑备份 2.2从数据库的备份策略角度分类 完全备份 差异备份 增量备份 3.常见的备份方法 3.1物理冷备份 3.2专用备份工具 MySQL dump或MySQL hot…...

rust 全栈应用框架dioxus server

接上一篇文章dioxus全栈应用框架的基本使用&#xff0c;支持web、desktop、mobile等平台。 可以先查看上一篇文章rust 全栈应用框架dioxus&#x1f448; 既然是全栈框架&#xff0c;那肯定是得有后端服务的&#xff0c;之前创建的服务没有包含后端服务包&#xff0c;我们修改…...

Clinica集成化的开源平台-神经影像研究

Clinica集成化的开源平台-神经影像研究 &#x1f31f; Clinica集成化的开源平台-神经影像研究引言 &#x1f6e0;️ 一、环境搭建与数据准备1. 安装Clinica&#xff08;附避坑指南&#xff09;2. 数据标准化&#xff08;BIDS格式处理&#xff09; &#x1f9e0; 二、sMRI预处理…...

LabVIEW中算法开发的系统化解决方案与优化

在 LabVIEW 开发环境中&#xff0c;算法实现是连接硬件数据采集与上层应用的核心环节。由于图形化编程范式与传统文本语言存在差异&#xff0c;LabVIEW 中的算法开发需要特别关注执行效率、代码可维护性以及与硬件资源的适配性。本文从算法架构设计、性能优化到工程实现&#x…...

【Pandas】pandas DataFrame cov

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值DataFrame.all([axis, bool_only, skipna])用于判断 DataFrame 中是否所有元素在指定轴上都为 TrueDataFrame.any(*[, axis, bool_only, skipna])用于判断…...

【递归、搜索与回溯】专题一:递归(一)

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人递归&#xff0c;搜索与回溯算法的学习以及LeetCode刷题记录&#xff0c;按专题划分每题主要记录&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代码&#xff1b;&#xff08;2&#xff09;优质解法 优质代码…...

pythonocc 拉伸特征

micromamba install -c conda-forge pythonocc-core opencascade.js安装不起来&#xff0c;ai用pythonocc练个手 拉伸线框 线成面 from OCC.Core.gp import gp_Pnt, gp_Dir, gp_Vec from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge, BRepBuilderAPI_MakeWire f…...

防爆手机与普通手机有什么区别

在石油化工、矿山能源、危化品运输等特殊行业中&#xff0c;一部手机的选择可能直接关系到生产安全与人员生命。防爆手机作为工业安全通信的核心工具&#xff0c;与日常使用的普通手机存在本质差异。本文将从技术原理、安全标准、功能设计及适用场景等维度&#xff0c;解析二者…...

动手学深度学习12.3.自动并行-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;无 本节教材地址&#xff1a;12.3. 自动并行 — 动手学深度学习 2.0.0 documentation 本节开源代…...

第二十二天打卡

数据预处理 import pandas as pd from sklearn.model_selection import train_test_splitdef data_preprocessing(file_path):"""泰坦尼克号生存预测数据预处理函数参数:file_path: 原始数据文件路径返回:preprocessed_data: 预处理后的数据集""&quo…...

SET NX互斥功能的实现原理

Redis 的 SET key value NX 命令通过其原子性和底层数据结构的特性实现互斥功能&#xff0c;具体实现如下&#xff1a; 1. 互斥功能的实现原理 SET NX 的核心是 原子性操作&#xff1a;当且仅当键&#xff08;key&#xff09;不存在时&#xff0c;才会设置键的值。Redis 的单线…...

前端 CSS 样式书写与选择器 基础知识

1.CSS介绍 CSS是Cascading Style Sheet的缩写&#xff0c;中文意思为"层叠样式表"&#xff0c;它是网页的装饰者&#xff0c;用来修饰各标签 排版(大小、边距、背景、位置等)、改变字体的样式(字体大小、字体颜色、对齐方式等)。 2.CSS书写位置 2.1 样式表特征 层…...

一小时学会Docker使用!

文章目录 前言一、安装ssh连接工具二、安装docker三、Docker常见命令四、docker-compose使用 前言 Docker&#xff1a; Docker简单来说就是简化环境配置的&#xff0c;我们配置环境只需要简单的docker pull&#xff0c;docker run即可&#xff0c;而删除环境也很容易&#xff…...

android studio开发aar插件,并用uniapp开发APP使用这个aar

android studio开发aar插件&#xff0c;并用uniapp开发APP使用这个aar 使用android studio打包aar和Unity导入aar详解...