jasypt 实现配置加密的核心是“加密存、自动解、密钥分离”:spring boot 启动时自动识别 enc(...) 值并用外部密钥解密注入,业务无感;需引入 jasypt-spring-boot-starter 依赖,命令行加密生成密文,密钥必须通过 jvm 参数或环境变量传入,不可写死配置中。

直接用 Jasypt 对配置文件里的数据库密码等敏感字段加密,核心是“加密存、自动解、密钥分离”。Spring Boot 启动时会自动识别 ENC(...) 格式的值,用你提供的密钥解密后注入到配置中,业务代码完全无感。
引入 Jasypt 依赖
在 pom.xml 中添加 starter(推荐最新稳定版,如 3.0.4):
com.github.ulisesbocchio:jasypt-spring-boot-starter
注意:不要用旧版 org.jasypt 坐标,它与 Spring Boot 2.x+ 兼容性差;starter 自动装配,无需额外配置类或 @EnableEncryptableProperties(该注解已过时)。
生成加密后的密码串
用命令行工具加密明文密码,例如数据库密码 myPass123:
- 下载
jasypt-1.9.3.jar(或对应版本),与脚本同目录 - 执行:
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="myPass123" password="MySecretKey" algorithm=PBEWithMD5AndDES - 输出类似:
ENC(7XzJvQaYcRtKsLmNpOqWxYzA==)
每次加密结果不同,但同一密钥可正确解密——这是 PBE 算法的正常特性,无需担心。
配置加密密钥(务必隔离)
密钥绝不能写死在 application.yml 或 application.properties 里。推荐方式:
- 启动时通过 JVM 参数传入:
java -jar app.jar --jasypt.encryptor.password=MySecretKey - 或设为环境变量:
export JASYPT_ENCRYPTOR_PASSWORD=MySecretKey(Linux/macOS)set JASYPT_ENCRYPTOR_PASSWORD=MySecretKey(Windows) - 生产环境建议从 Vault、K8s Secret 或配置中心动态拉取
修改配置文件并验证
将原明文替换为 ENC(...) 包裹的密文:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: ENC(7XzJvQaYcRtKsLmNpOqWxYzA==)
启动应用后,Spring 会自动解密该值并交由 DataSource 使用。若启动报错提示“Cannot decrypt”,说明密钥不匹配或未传入——检查大小写、空格、编码格式(尤其 Windows 下 cmd 默认 GBK 可能导致乱码)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











