news 2026/1/12 15:02:09

Spring Boot 项目配置文件密码加密解决方案 —— Jasypt 实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Boot 项目配置文件密码加密解决方案 —— Jasypt 实战指南

🔒 别再把数据库、Redis、MQ 的密码明文写在application.yml里了!

你是否也在 Spring Boot 项目中这样配置 Redis?

spring: redis: username: danny # ⚠️ 危险!明文密码! password: 123456 host: r-89adfadjf9ladk.redis.rds.dannycloud.com port: 6379

如果答案是“是”,请立即停止并修改!一旦代码被提交到 Git 仓库、配置文件被泄露,你的服务将面临严重安全风险。

好消息是:Jasypt是目前最主流、最轻量、且与 Spring Boot 集成最友好的配置加密方案。本文将以加密 Redis 密码为例,手把手教你实现安全配置。

为什么选择Jasypt?

  • 零侵入:只需添加 starter,无需修改业务代码
  • 自动解密:Spring Boot 启动时自动识别ENC(...)并解密
  • 算法安全:支持 AES-256、PBKDF2 等现代加密标准
  • 社区成熟:GitHub 超 5k stars,广泛用于生产环境


🛠️ 实施步骤

步骤1:添加依赖

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

💡 注意:该 starter 已内置兼容的jasypt-core无需单独引入jasypt原生库

步骤2:配置加密密钥(从环境变量获取)

application.yml中添加 Jasypt 配置:

jasypt: encryptor: password: ${ENCRYPT_KEY} algorithm: PBEWithHMACSHA512ANDAES_256 iv-generator-classname: org.jasypt.iv.RandomIvGenerator

🔑 关于ENCRYPT_KEY的重要说明:

  • 这是加密主密钥(Master Key),用于派生实际加密密钥
  • 绝对不要将其写入任何配置文件或代码中!
  • 推荐通过以下方式传入:
    • Docker-e ENCRYPT_KEY=MySuperSecureEncryptionKey12345!
    • 启动命令java -jar app.jar --jasypt.encryptor.password=xxx
    • K8s Secret / Vault:更高级的密钥管理方案

✅ 密钥建议:使用32 字节以上的强随机字符串,例如:MySuperSecureEncryptionKey12345!

步骤3:加密你的敏感密码

下载Jasypt命令行工具(仅用于加密,不需打包进项目):👉 https://repo1.maven.org/maven2/org/jasypt/jasypt/1.9.3/jasypt-1.9.3.jar)

执行加密命令:

java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI \ input="123456" \ password=MySuperSecureEncryptionKey12345! \ algorithm=PBEWithHMACSHA512ANDAES_256 \ ivGeneratorClassName=org.jasypt.iv.RandomIvGenerator

参数详解:

  • org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI是Jasypt 提供的命令行加密工具主类。

  • input为要加密的密码明文(比如这里的123456就是我项目中Redis的密码),如果密码包含特殊字符(如$,!,&等),建议用单引号包裹或转义,避免 shell 解析错误。

  • algorithm指定使用的加密算法,PBEWithHMACSHA512ANDAES_256算法表示:使用 PBKDF2 从 password 派生密钥,HMAC-SHA512 作为 PRF(伪随机函数),AES-256 作为对称加密算法。

  • password为要加密的秘钥(口令),它不是你要加密的内容,而是用来派生实际加密密钥的“种子”,⚠️这个密钥绝不能写在配置文件里!应通过环境变量或者启动参数传入。对于PBEWithHMACSHA512ANDAES_256算法,建议使用至少 32 字节(即 32 个字符)的强随机字符串,例如:MySuperSecureEncryptionKey12345!

  • ivGeneratorClassName指定初始化向量(IV)生成器,RandomIvGenerator表示每次加密都使用随机 IV,提高安全性(防止相同明文加密出相同密文)。这是推荐做法,应尽量避免使用固定 IV(如NoIvGenerator)。

执行后OUTPUT即为加密后的密码:

步骤4:修改包含密码的配置文件

将步骤3中生成的密码密文包装在ENC(...)中,更新配置:

spring: redis: username: danny password: ENC(ScpMupqFoX4lhwTjRAhQIQd/YcZyS5IuHOcHGeIbvv2hUvX70lvAuDeMmIJ9fL/T) host: r-89adfadjf9ladk.redis.rds.dannycloud.com port: 6379

✅ 启动应用时,Jasypt 会自动解密ENC(...)内容,Redis 连接不受影响!



🚀 部署建议(生产环境必看)

密钥管理

  • 开发环境:可通过 .env 或启动参数临时使用
  • 生产环境:务必使用 密钥管理服务(如 HashiCorp Vault、AWS KMS、阿里云 KMS)

避免命令行历史泄露

执行加密命令时,不要直接在 shell 中写明 password=xxx,建议:

read -s -p "Enter encrypt key: " KEY java -cp jasypt-1.9.3.jar ... password="$KEY"

替代方案参考

  • 若使用Spring Cloud Config,可结合 Vault 或 native encryption
  • 若追求极致安全,可考虑应用启动时动态拉取密钥


❌ 常见误区

误区正确做法
ENCRYPT_KEY写在application.yml必须通过环境变量或外部传参
使用弱算法如PBEWithMD5AndDES坚持使用PBEWithHMACSHA512ANDAES_256
认为“内网就安全”内部泄露同样会造成重大损失
手动下载不明来源的.jar文件仅从 Maven Central 等官方源获取



✅ 总结

通过 Jasypt,我们以极低的成本实现了配置文件的敏感信息脱敏,既满足安全合规要求,又不影响开发体验。记住:

密钥不在代码中,密码不在配置里—— 这是现代应用安全的第一道防线。

赶快检查你的项目,给那些明文密码“穿上盔甲”吧!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/21 9:10:47

调和级数求和

调和级数求和&#xff08;Harmonic Series&#xff09;模型是时间复杂度分析中稍微进阶一点的考点。它通常出现在**“跳跃式”循环或者“倍数”相关**的题目中。 如果说前面的题目是“送分题”&#xff0c;这个模型就是**“分水岭题”**&#xff0c;掌握了它&#xff0c;你的算…

作者头像 李华
网站建设 2026/1/11 14:37:48

格子玻尔兹曼方法(LBM)的MRT作用力模型

格子玻尔兹曼方法&#xff08;LBM&#xff09;MRT作用力模型格子玻尔兹曼方法搞流动模拟的老司机都知道&#xff0c;MRT&#xff08;多松弛时间&#xff09;模型可比单松弛时间模型&#xff08;BGK&#xff09;香多了。这玩意儿最大的特点就是数值稳定性强&#xff0c;边界条件…

作者头像 李华
网站建设 2026/1/1 19:13:24

水面上划过的涟漪遇到礁石会拐弯,声波撞上超表面也得乖乖听话。今天咱们来折腾COMSOL里水声超表面的反射特性计算,这玩意儿在声学隐身和定向传声领域正热乎着呢

comsol水声超表面反射系数与反射相位计算。打开模型树先给几何结构来点硬核配置。假设咱们设计的是锯齿状超表面单元&#xff0c;用AppendAxisymmetric搞个二维轴对称模型省点计算量。材料属性直接上内置的液态水&#xff0c;密度和声速参数别照搬默认值&#xff0c;实测海域数…

作者头像 李华
网站建设 2025/12/30 15:52:03

为何选择具备制造业基因的厂商,是ERP与OA系统集成成功的关键

在当今数字化转型的浪潮中&#xff0c;企业资源计划系统与办公自动化系统的集成&#xff0c;已不再是可有可无的选项&#xff0c;而是提升运营效率、打破信息孤岛的核心举措。然而&#xff0c;面对市场上众多的集成服务商&#xff0c;企业往往陷入选择困境&#xff1a;技术参数…

作者头像 李华
网站建设 2026/1/8 22:59:10

NSGA-II实战:用Matlab玩转多目标优化

非支配排序多目标遗传算法(NSGA-II) Matlab实现——高质量版测试函数包括ZDT、DTLZ、WFG、CF和UF共46个等&#xff0c;另外附有一个工程应用案例&#xff1b;评价指标包括超体积度量值HV、反向迭代距离IGD、迭代距离GD和空间评价SP等可提供相关多目标算法定制、创新和改进多目标…

作者头像 李华