SpringBoot配置文件加密
公司为了增加配置文件安全性,配置文件中不能用明文的数据库连接密码等信息,因此需要对application.yml配置文件中的密码加密,搜了下发现springboot
中比较常用的加密框架是jasypt
下载jasypt
下载地址:
https://github.com/jasypt/jasypt/releases/tag/jasypt-1.9.3
里面提供一些工具,可以方便使用,代码中使用可以用maven引入。
引入jasypt
使用Maven
引入,现在是3.0.3版本:
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>${jasypt-spring.version}</version>
</dependency>
配置jasypt
配置加密密码:
jasypt:
encryptor:
password: 12345678
可以先使用jasypt
来生成加密字符串
@Autowired
private StringEncryptor jasyptStringEncryptor;
@PostMapping("/encrypt")
public BaseStrResult encrypt(@RequestBody BaseStrParam param){
String encryptStr = jasyptStringEncryptor.encrypt(param.getInput());
BaseStrResult result = new BaseStrResult();
result.setResult(encryptStr);
return result.success();
}
配置到配置文件中
spring:
datasource:
password: ENC(LGw2sBBoQ061HhpCPS7lgiOWCfHxUonaDy2GtY6W+/tJakz1jKHhBSHQ6j3K0LFt)
可以正常启动就表示成功了。
jasypt配置算法
默认jasypt使用的算法是:PBEWITHHMACSHA512ANDAES_256,基于密码的SHA512+AES算法,需要 Java JDK 1.9+
查看支持的算法:
$ listAlgorithms.bat
DIGEST ALGORITHMS: [MD2, MD5, SHA, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256, SHA3-224, SHA3-256, SHA3-384, SHA3-5
12]
PBE ALGORITHMS: [PBEWITHHMACSHA1ANDAES_128, PBEWITHHMACSHA1ANDAES_256, PBEWITHHMACSHA224ANDAES_128, PBEWITHHMACSHA224ANDAES_256, P
BEWITHHMACSHA256ANDAES_128, PBEWITHHMACSHA256ANDAES_256, PBEWITHHMACSHA384ANDAES_128, PBEWITHHMACSHA384ANDAES_256, PBEWITHHMACSHA512AND
AES_128, PBEWITHHMACSHA512ANDAES_256, PBEWITHMD5ANDDES, PBEWITHMD5ANDTRIPLEDES, PBEWITHSHA1ANDDESEDE, PBEWITHSHA1ANDRC2_128, PBEWITHSHA
1ANDRC2_40, PBEWITHSHA1ANDRC4_128, PBEWITHSHA1ANDRC4_40]
可以选择需要使用的算法加密。
jasypt命令行工具
从Github下载的文件jasypt-1.9.3-dist.zip解压后可以看到bin目录下有不少工具
listAlgorithms.bat获取支持的算法
命令行加密工具帮助:
.\encrypt.bat
USAGE: encrypt.bat [ARGUMENTS]
* 参数格式:
"arg1=value1 arg2=value2 arg3=value3 ..."
* 必填参数:
input
password
* 可选参数:
verbose
algorithm
keyObtentionIterations
saltGeneratorClassName
providerName
providerClassName
stringOutputType
ivGeneratorClassName
命令行加密:
# 加密
encrypt.bat input="12345678" password="1234567890" algorithm=PBEWITHHMACSHA512ANDAES_256 ivGeneratorClassName=org.jasypt.iv.RandomIvGenerator
# 解密
decrypt.bat input="B8HS1fG8WQwxtIw+SnExxLrUal8hJ516H3DiwdbJIztvxWIMT2TL1y7uqPdX/P+9" password="1234567890" algorithm=PBEWITHHMACSHA512ANDAES_256 ivGeneratorClassName=org.jasypt.iv.RandomIvGenerator