概述
有些项目可能需要将配置中的一些属性加密防止泄露,比如一些密码属性。在java项目中,jasypt工具就实现了这样的功能。
他的实现原理是将密码加密得到密文,将密文放入配置文件中。运行时读取到密文,将密文解密得到原文。
加密原文时需要密码,加密后的值类似为:package.tagsJsonName=ENC(BPOpaQk2Uf2Oa+GVrOyxZrt4fAwAL3o0b2Mx1WBC64myVxo5oRVAXlo9dApiDH4F)。
代码运行时再使用密码进行解密,解密的密码可以放入配置文件、系统属性、命令行或是环境变量中。但是不推荐直接将密码放入配置文件中。
加密
使用maven插件进行加密,添加maven plugin:
<plugin>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-maven-plugin</artifactId>
<version>3.0.3</version>
</plugin>
加密一个字符串:
mvn jasypt:encrypt-value -Djasypt.encryptor.password="the password" -Djasypt.plugin.value="theValueYouWantToEncrypt"
加密配置文件
将配置文件中 src/main/resources/application.properties 值包含 DEC(加密前的值) 属性加密:
mvn jasypt:encrypt -Djasypt.encryptor.password="the password"
这会自动将配置文件中所有包含DEC的属性的值替换成ENC(加密后的值),如sensitive.password=DEC(secret value) 替换成 sensitive.password=ENC(encrypted)。
解密一个加密后的字符串
mvn jasypt:decrypt-value -Djasypt.encryptor.password="the password" -Djasypt.plugin.value="yVrdhoqif3oeZOKsRsNn0OosbpbisEhhBYQdYDG9yViIVzOKxL7Hl5SkkUxrt0XY+ADjMpa+JWE3MGJ5e9b/ZQ=="
解密配置文件
mvn jasypt:decrypt -Djasypt.encryptor.password="the password"
会将 src/main/resources/application.properties 中 ENC包含的加密后的值替换为原文后输出到屏幕,注意解密不会自动修改文件。