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.properties 或 application.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. 安全存储密钥:优先用环境变量或启动参数。
相关推荐
SL_staff3 分钟前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
IT规划师21 分钟前
编程术语中的同步与异步:从"等不等"到工程取舍
后端·面试
SL_staff1 小时前
打破风控迭代死循环:用决策编排重构业务与技术协作链路
java·产品·全栈
孟陬1 小时前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端
GoGeekBaird1 小时前
别再给每个 AI 做自我介绍了:我做了一个「个人上下文」管理系统
后端·github·agent
码事漫谈1 小时前
腾讯混元 Hy4 正式版发布了
后端
Mikko71 小时前
Redis 连接数满了服务端有错误信息吗?连接数不增加却命令超时?6.2 实测连接池、超时与大 key 怎么判定
java·spring boot·redis·后端
.Bryce.2 小时前
从零到一开发技术名词大全:从需求分析到 AI Agent 工程
java·网络·人工智能·agent·需求分析·agent评测
SL_staff2 小时前
JVS-APS的7个刚性约束设计:从无限产能幻觉到可执行排产的工程实践
java·spring cloud·全栈
苍何3 小时前
DeepSeek的Super-agent 设计,和我们的工程实践
后端