jasypt通过enc()包裹密文实现启动自动解密,业务代码无需修改;关键在于密钥安全管理(禁止硬编码,应通过参数、环境变量或k8s secret注入)和密文生成(需与运行时密钥及算法一致,推荐命令行工具或测试代码生成)。

直接用 Jasypt 把明文密码替换成 ENC() 包裹的密文,启动时自动解密,业务代码完全不用改。关键不是“能不能加”,而是“密钥怎么管”和“密文怎么生成”——这两步做错,加密就形同虚设。
添加依赖并确认版本兼容性
Spring Boot 2.x/3.x 推荐使用 jasypt-spring-boot-starter 3.0.4 及以上版本。Maven 中添加:
注意:不要混用旧版(如 2.x)与 Spring Boot 3,可能引发类加载或算法不兼容问题。Gradle 用户对应写法为:implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'。
密钥不能写死在配置文件里
虽然可以在 application.yml 里写:
jasypt:
encryptor:
password: myStrongSecretKey123
但这是高危操作——等于把保险箱钥匙贴在锁上。正确做法是通过外部方式传入:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 启动时加参数:
java -jar app.jar --jasypt.encryptor.password=MySecr3t!2026 - 设环境变量:
export JASYPT_ENCRYPTOR_PASSWORD=MySecr3t!2026,再运行 jar - K8s 中用 Secret 挂载,或云平台用密钥管理服务(如 AWS Secrets Manager、阿里云 KMS)注入
密钥建议至少 12 位,含大小写字母、数字和符号;避免用项目名、日期等可猜测内容。
生成密文的两种可靠方式
加密必须用和运行时**完全一致的密钥与算法**,否则启动失败。推荐以下任一方法:
-
命令行工具(最可控):下载
jasypt-1.9.3.jar,执行:java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="root123" password="MySecr3t!2026" algorithm=PBEWithMD5AndDES
输出类似ENC(au6sZ2WURqZZp8v1A4kL7w==) -
代码内测试生成(适合开发阶段):在 @SpringBootTest 测试类中 Autowire
StringEncryptor,调用encrypt("your_password")打印结果
别用不可信的在线加密网站——密钥和明文都可能被截获。
配置文件中正确填写密文格式
替换 application.yml 中的敏感字段,严格使用 ENC(...) 大写包裹,前后不留空格:
spring:
datasource:
username: ENC(sT6BztXbJEa71eg3pPGYMQ==)
password: ENC(MpSZFJ9ftq+3+VUANZjr0Q==)
redis:
password: ENC(8GxKvRnLmPqS9tUwXzY2==)
Jasypt 会自动识别所有 ENC() 块,在 Spring Environment 加载阶段完成解密。@Value("${spring.datasource.password}") 或 @ConfigurationProperties 绑定到的仍是明文值,对业务零侵入。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










