# SpringBoot配置文件中密码属性加密
本文主要介绍了SpringBoot配置文件中的明文密码如何加密保存,读取以及对于自定义的加密算法加密的参数如何保存和读取。
## 背景
为了安全的需要,一些重要的信息比如数据库密码不能明文保存在配置文件中,需要进行加密之后再保存。SpringBoot可以使用jasypt-spring-boot这个组件来为配置属性提供加密的支持。
## 集成jasypt-spring-boot到项目中
根据官方README文档,可以有三种方式集成jasypt-spring-boot到项目中。
1. 对于SpringBoot项目,直接通过引入jasypt-spring-boot-starter,然后所有的application.properties, application-*.properties, yaml的配置文件中就可以包含加密的属性。
```
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
```
2. 直接引入jasypt-spring-boot,这时候需要在启动类上添加一个@EnableEncryptableProperties,然后在配置文件中可以包含有加密的字段属性。
```
@SpringBootApplication
@EnableEncryptableProperties
public class Application {
...
}
```
3. 如果不想要整个Spring的配置文件都启用加密的字段属性,还可以自己指定对应加密的配置文件路径。也需要引入jasypt-spring-boot,同时在启动类上添加@EncryptablePropertySource注解,设置注解的value属性为需要读取的加密配置文件路径。
```
@SpringBootApplication
@EncryptablePropertySource({"classpath:encrypted.properties"})
public class Application {
...
}
```
## 配置文件配置加密与读取
现在知道了如何集成jasypt-spring-boot到项目中,下面就介绍一下如何加密明文的密码,以及需要如何存储在配置文件中。
1. 首先,需要添加一个maven的插件,这个插件可以帮助我们加密我们需要的明文信息。
```
<plugin>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-maven-plugin</artifactId>
<version>3.0.4</version>
</plugin>
```
2. 之后,执行如下的mvn命令,可以在控制台得到对于的密文。然后将配置文件中明文替换为加密后的密文。
```
mvn jasypt:encrypt-value -Djasypt.encryptor.password="TKzhc3fz" -Djasypt.plugin.value="123456"
```
`-Djasypt.encryptor.password`参数指定用于加密密码,我理解这个应该和秘钥类似。
`-Djasypt.plugin.value`参数指定需要加密的明文参数。
执行命令后,可以在控制台看到加密后的密文,密文默认是用ENC()格式包围住的,当然这个格式也可以自定义。
<img width="930" height="444" src="/resources/3ede5534b0fb40c8973c4df60b3cdf1e"/> 也可以通过这个mvn插件解密,执行如下命令,可以在控制台看到解密之后的明文。
```
mvn jasypt:decrypt-value -Djasypt.encryptor.password="TKzhc3fz" -Djasypt.plugin.value="ENC(Muhq57xdiHA5jJX9pX7zmNz57w4emX2D/XYIXOMEx0LYcTL7RYyadWe2J7GCi9KJ)"
```
<img width="930" height="444" src="/resources/56a3b4eddd3e4aca907dc7bad2e26fba"/>
3. 在SpringBoot配置文件中,添加jasypt.encryptor.password属性,这个值和第二步生成密文的值要一样,不然解密会失败。
```yml
jasypt:
encryptor:
password: TKzhc3fz # 设置加密的password信息 类似秘钥?
test:
password: ENC(Muhq57xdiHA5jJX9pX7zmNz57w4emX2D/XYIXOMEx0LYcTL7RYyadWe2J7GCi9KJ) # 测试数据
```
4. 这样在主程序启动的时候,通过@Value注解就可以自动解密配置文件中的密文信息了,这样就完成了明文的加密以及后续的读取。
<img width="930" height="429" src="/resources/332f38c1dec74772928d38bb141ed81d"/>
参考链接:https://github.com/ulisesbocchio/jasypt-spring-boot
代码地址:https://github.com/yzh19961031/SpringCloudDemo
转载自:https://blog.csdn.net/qq_32238611/article/details/122724605