
在系统的使用时,配置文件中一些重要的信息为了安全,需要对其进行加密保存,比如数据库密码不能使用明文保存在配置文件,需要进行加密之后再保存。SpringBoot可以使用jasypt来为重要的配置属性提供加解密的支持。
spring-boot集成jasyptSpringBoot项目,直接通过引入jasypt-spring-boot-starter,jasypt使用与自己SpringBoot项目对应的版本
com.github.ulisesbocchio jasypt-spring-boot-starter 3.0.3
添加一个maven的插件,这个插件可以帮助我们加密我们需要的明文信息。
com.github.ulisesbocchio jasypt-maven-plugin 3.0.3
然后执行mvn命令,可以在控制台得到对应的密文。将配置文件中明文替换为加密后的密文。
mvn jasypt:encrypt-value -Djasypt.encryptor.password=yuorPassword -Djasypt.plugin.value=root
-Djasypt.encryptor.password:类似于加密的密钥
-Djasypt.plugin.value:需要加密的明文参数。
执行命令后,在控制台可以看到加密后的密文,密文默认是用ENC()格式包围住的,这个格式也可以自定义。
注意:使用默认的JDK8时可能会出现JCE的问题:Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy,原因是Java密码术扩展(JCE)无限强度管辖权策略,
解决办法:
https://www.oracle.com/technetwork/cn/java/javase/downloads/jce8-download-2133166-zhs.html
去官网下载JCE压缩包,找到jre下的security的目录:%JAVA_HOME%jrelibsecurity,备份原来的文件,替换成下载的压缩包中的文件。
也可以通过这个mvn插件解密,执行如下命令,可以在控制台看到解密之后的明文。
mvn jasypt:decrypt-value -Djasypt.encryptor.password=yuorPassword -Djasypt.plugin.value=ENC(20IDlU5b4uyj3QTp4dH6fMEbH53B+LW9hhYfe3z4y/8glojojnA0d72JNZBTEaRP)
在项目配置文件中,把刚刚加密得到的密文替换原明文即可。
为了完全,把jasypt的password和配置文件中的密文分开保存
@Bean("jasyptStringEncryptor")
public StringEncryptor jasyptStringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword("yuorPassword");
config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
其中参数可参照加密明文时打印的日志信息。
最后说一下自定义解密前后缀,在配置文件中添加以下配置,以yaml为例
jasypt:
encryptor:
property:
prefix: "ENC@("
suffix: ")"