SpringBoot项目application.yml文件数据库配置密码加密

在Spring boot开发中,需要在application.yml文件里配置数据库的连接信息,或者在启动时传入数据库密码,如果不加密,传明文,数据库就直接暴露了,相当于"裸奔"了,因此需要进行加密处理才行。

如果使用@SpringBootApplication注解启动的项目,只需增加maven依赖,其他方式请参考如下GitHub地址的README信息:

https://github.com/ulisesbocchio/jasypt-spring-boot

pom.xml

 <!--文件数据库配置密码加密https://github.com/ulisesbocchio/jasypt-spring-boot-->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>
        

我们对信息加解密是使用这个jar包的:

编写加解密测试类:

  @Test
    public void testEncrypt() throws Exception {
        StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();

        config.setAlgorithm("PBEWithMD5AndDES");          // 加密的算法,这个算法是默认的
        config.setPassword("codingce");                        // 加密的密钥
        standardPBEStringEncryptor.setConfig(config);
        String plainText = "123456";
        String encryptedText = standardPBEStringEncryptor.encrypt(plainText);
        System.out.println(encryptedText);
    }

    @Test
    public void testDe() throws Exception {
        StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();

        config.setAlgorithm("PBEWithMD5AndDES");
        config.setPassword("codingce");
        standardPBEStringEncryptor.setConfig(config);
        String encryptedText = "p+8PnU4Lcun4ZA0Hz2ckokJ62fHUS7BF";
        String plainText = standardPBEStringEncryptor.decrypt(encryptedText);
        System.out.println(plainText);
    }
    

首先运行testEncrypt(),明文是‘123456’,加密密钥是"codingce",密钥可以自己定,运行输出如下为:

p+8PnU4Lcun4ZA0Hz2ckokJ62fHUS7BF

然后运行testDe(),加密后的串为p+8PnU4Lcun4ZA0Hz2ckokJ62fHUS7BF,输出的明文为123456。加解密可以。

另外,也可以通过命令行方式处理

可以发现,同样的明文和加密密钥,加密后的串却不一样。

加密串拿到了,现在来修改application.yml的配置:

# Mysql数据库
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/wx_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root
    password: ENC(p+8PnU4Lcun4ZA0Hz2ckokJ62fHUS7BF)
    filters: wall, mergeStat

我们把加密串放在ENC({加密串})即可。

还要加这个密钥的配置:

jasypt:
    encryptor:
        password: codingce

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×