对于一些安全性要求比较高的企业,是不允许在配置文件中配置明文密码的。因为如果在配置文件中采用明文存储密码,将会降低系统安全性。这个时候,jasypt
框架就派上用场了。
首先什么是jasypt?
详细网址 : http://www.jasypt.org/
简单来说,就是一个安全框架,用于对一些如数据库密码等重要信息进行加密的框架
配置文件的属性加密解决步骤:
(1):引入pom包
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
(2): 对配置文件的属性值加盐加密得到加密后的密文
//msg:配置文件的属性值
public static void encrypt(String msg) {
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
//加密所需的salt(盐)
textEncryptor.setPassword("lsggb");
//要加密的数据(数据库的用户名或密码)
String password = textEncryptor.encrypt(msg);
System.out.println("password:" + password);
}
(3): 修改配置文件,把配置文件中要加密的属性值改为:ENC(密文)
druid:
driver-class-name: com.mysql.jdbc.Driver
url:
username:
password: ENC(密文)
(4): 在配置文件中配置盐值
jasypt:
encryptor:
password: lsggb
解密秘钥 jasypt.encryptor.password 也在配置文件里,别人拿到服务器上部署配置文件后,是不是也很轻松的就可以解开这个密码了?
开发环境:为了防止salt(盐)泄露,反解密出密码。删除掉application.properties中的 jasypt.encryptor.password
,然后在IDE的运行参数中添加 -Djasypt.encryptor.password=lsggb
生成部署:直接在启动的shell脚本中添加-Djasypt.encryptor.password=lsggb
解密密文验证是不是原属性值:
public static void decrypt(String msg) {
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
//加密所需的salt(盐)
textEncryptor.setPassword("lsggb");
//要加密的数据(数据库的用户名或密码)
String password = textEncryptor.decrypt(msg);
System.out.println("password:" + password);
}