使用jasypt在springboot中加密敏感信息
文章目录
1.简介
jasypt(Java Simplified Encryption)是一个轻量级Java加密库,专为简化应用程序加密操作而设计,通过易用API帮助开发者无需深入密码学知识即可实现敏感数据保护。其核心特性包括:与Spring Boot深度集成实现配置属性的自动加解密(使用ENC(密文)格式即可自动解密);支持多种主流算法如PBEWithMD5AndDES和默认的PBEWITHHMACSHA512ANDAES_256;采用分离式密钥管理机制,要求加密密钥必须通过环境变量或命令行动态注入,杜绝密钥泄露风险;提供完善的工具链如Maven插件支持命令行加密、配置文件动态解密代理及自定义盐生成器/IV向量等参数配置。典型应用场景涵盖保护Spring Boot配置文件中的数据库密码/API密钥、实现日志/数据库的PII信息脱敏,以及满足GDPR/等保2.0等合规要求,其通过AES-256等标准算法结合随机盐与迭代哈希,在密钥妥善保管时可提供极高安全性保障。
项目地址:https://github.com/ulisesbocchio/jasypt-spring-boot
2.加密敏感信息
2.1 引入Maven加密插件
在pom.xml中添加:
<build><plugins><plugin><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-maven-plugin</artifactId><version>3.0.5</version></plugin></plugins></build>2.2 执行加密命令
在项目目录执行:
mvn jasypt:encrypt-value \ -Djasypt.encryptor.password="your-password"\ -Djasypt.plugin.value="原始敏感值"控制台输出加密结果(如ENC(In+7esX42WEldd+Wzr4FaI2H2w6d0jXMWfUM1m6HbR+43kV0J7Qq9uXYeGqQqJh6)),复制备用。
3.在Spring Boot中使用
3.1 添加依赖
<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.5</version></dependency>3.2 配置文件
在application.properties中:
apiKey=ENC(In+7esX42WEldd+Wzr4FaI2H2w6d0jXMWfUM1m6HbR+43kV0J7Qq9uXYeGqQqJh6) jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator jasypt.encryptor.algorithm=PBEWithMD5AndDES 3.3 Java类示例
@SpringBootApplicationpublicclassDemoApplicationimplementsCommandLineRunner{@Value("${apiKey}")privateString apiKey;publicstaticvoidmain(String[] args){SpringApplication.run(DemoApplication.class, args);}@Overridepublicvoidrun(String... args){System.out.println("apiKey = "+ apiKey);}}3.4 启动应用
通过环境变量传递密钥:
exportJASYPT_ENCRYPTOR_PASSWORD=your-password java -jar app.jar IDEA中环境变量使用如下方式传入:

或使用命令行参数:
java -jar app.jar --jasypt.encryptor.password=your-password 4.注意事项
- 密钥安全:切勿将加密密钥写入配置文件或代码
- 密钥传递方式:
- 环境变量:
export JASYPT_ENCRYPTOR_PASSWORD=密钥 - 命令行参数:
java -jar app.jar --jasypt.encryptor.password=密钥
- 环境变量:
- 加解密算法需保持一致
5.进阶配置参数
| 参数 | 必需 | 默认值 |
|---|---|---|
| jasypt.encryptor.password | 是 | - |
| jasypt.encryptor.algorithm | 否 | PBEWITHHMACSHA512ANDAES_256 |
| jasypt.encryptor.key-obtention-iterations | 否 | 1000 |
| jasypt.encryptor.pool-size | 否 | 1 |
| jasypt.encryptor.provider-name | 否 | SunJCE |
| jasypt.encryptor.provider-class-name | 否 | null |
| jasypt.encryptor.salt-generator-classname | 否 | org.jasypt.salt.RandomSaltGenerator |
| jasypt.encryptor.iv-generator-classname | 否 | org.jasypt.iv.RandomIvGenerator |
| jasypt.encryptor.string-output-type | 否 | base64 |
| jasypt.encryptor.proxy-property-sources | 否 | false |
| jasypt.encryptor.skip-property-sources | 否 | empty list |
6.小结
通过jasypt可实现:
- 使用Maven插件加密敏感信息
- Spring Boot自动解密ENC()包裹的配置值
- 通过环境变量/命令行安全传递密钥
- 支持多种加密算法和高级配置
完整方案确保敏感信息(如API密钥、数据库密码)不在配置文件中明文暴露。