配置文件内容加密jasypt

 使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些。打开application.properties或application.yml,比如mysql登陆密码,redis登陆密码以及第三方的密钥等等一览无余,这里介绍一个加解密组件,提高一些属性配置的安全性。

    jasypt由一个国外大神写了一个springboot下的工具包,下面直接看代码:

    1、maven依赖引入:
 

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.0</version>
</dependency>

2、application.yml配置文件

# 加密所需的salt(盐)
jasypt:
  encryptor:
    password: l&id81!lw            # 根密码用于加密
    algorithm: PBEWithMD5AndDES   
 # 加密方式默认为PBEWithMD5AndDES 可以更改为  PBEWithMD5AndTripleDES

3、通过测试类在main方法测试生成秘钥:


//这是JUnit的注解,通过这个注解让SpringJUnit4ClassRunner这个类提供Spring测试上下文。
@RunWith(SpringRunner.class)
//这是Spring Boot注解,为了进行集成测试,需要通过这个注解加载和配置Spring应用上下 
@SpringBootTest
@WebAppConfiguration
public class PwdDecOrEnc {
	@Test
	public void decrypt() {
	    StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
	    EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
	    config.setAlgorithm("PBEWithMD5AndDES");
	    config.setPassword("l&id81!lw");
	    encryptor.setConfig(config);
		String name = encryptor.encrypt("ebuy");
		String password = encryptor.encrypt("123456");

		//解密
		String mdName =encryptor.decrypt("LtcG3xB87zaxyM4ddTCZUg==");
		String mdPassword =encryptor.decrypt("xIJQ9OWQeDfsnk6i25uPSg==");
		System.out.println(name+"----------------"+mdName);
		System.out.println(password+"----------------"+mdPassword);
	}
	public static void main(String[] args) {
		new  PwdDecOrEnc().decrypt();
	}
}

运行结果为:
meDBUdDTyHBY6jdsBrknEA==----------------ebuy
EhiZCKp77GkooRSzFmQ5wg==----------------123456

Process finished with exit code 0

4.将上面生成的name和password替换配置文件中的数据库账户和密码,替换后如下:

  mysql. userName: ENC(P1qn2ZBGzneOw5c5kfMTIw==)

  mysql.passWord: ENC(nL7ZPZoMBWPXivkF0SYOxw==)

spring.datasource.username: ${mysql.userName}

  spring.datasource.password: ${mysql.passWord}

5、考虑根密码写在配置文件中并不安全 可以将其放入到启动参数中实现加密

实现方法如下图:

 
 

设置完后记得删除此段配置

# 加密所需的salt(盐)
jasypt:
  encryptor:
    password: l&id81!lw            # 根密码用于加密
    algorithm: PBEWithMD5AndDES   
 # 加密方式默认为PBEWithMD5AndDES 可以更改为  PBEWithMD5AndTripleDES

猜你喜欢

转载自blog.csdn.net/weixin_41676972/article/details/84992565