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

​​

目录

​​

[​1. 为什么需要加密配置文件?​​](#1. 为什么需要加密配置文件?)

[​2. Jasypt 快速集成​](#2. Jasypt 快速集成)

[​2.1 在xml文件中添加 Maven 依赖​](#2.1 在xml文件中添加 Maven 依赖)

[​2.2 生成加密字符串​​](#2.2 生成加密字符串)

​编辑

​编辑

[​3. 安全最佳实践​](#3. 安全最佳实践)

[​4. 常见问题​](#4. 常见问题)

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

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

[​5. 总结​](#5. 总结)


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

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

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

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


2. Jasypt 快速集成

2.1 在xml文件中添加 Maven 依赖

java 复制代码
<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 复制代码
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="root" password=huihui algorithm=PBEWithMD5AndDES

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

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

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

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

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

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

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

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

数据库数据正确查出。

但是!!!

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

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

java 复制代码
//加入的分别是以下冒号后面的内容
Name: JASYPT_ENCRYPTOR_PASSWORD  
Value: huihui

Name: JASYPT_ENCRYPTOR_ALGORITHM  
Value: PBEWithMD5AndDES

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

java 复制代码
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. 安全存储密钥:优先用环境变量或启动参数。
相关推荐
爱可生开源社区3 分钟前
SCALE | SQLFlash 在 SQL 优化维度上的表现评估
后端
Java爱好狂.18 分钟前
Java面试Redis核心知识点整理!
java·数据库·redis·分布式锁·java面试·后端开发·java八股文
sheji341629 分钟前
【开题答辩全过程】以 基于Java的应急安全学习平台的设计与实现为例,包含答辩的问题和答案
java·开发语言·学习
程序员小假40 分钟前
我们来说一下消息的可靠性投递
java·后端
duangww1 小时前
SAPUI5 1.71.78老版本的消费restful服务
后端·restful
席之郎小果冻1 小时前
【04】【创建型】【聊一聊,建造者模式】
java·前端·建造者模式
用户8599681677691 小时前
UE5虚幻引擎汽车HMI设计高级研修课
后端
用户8599681677691 小时前
鸿蒙HarmonyOS多线程编程实战:AI语音
后端
原来是好奇心1 小时前
深入Spring Boot源码(四):Starter机制与依赖管理深度解析
java·源码·springboot·starter