SpringBoot实现ENC密码加密

SpringBoot实现密码加密

1.为什么要进行加密

在日常项目开发中,我们可能要进行一些密码、密钥的配置,这些涉密信息如果以明文形式配置的话,很可能导致数据泄密,比如常见的数据库配置如下:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydatabase?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 12345678
    type: com.alibaba.druid.pool.DruidDataSource

这里的数据库密码以明文形式出现,有泄露的风险,采用如下加密方式配置安全级别就高了:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db1?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: ENC(T4rdlSnwT&afahdLPRo9oi_)
    type: com.alibaba.druid.pool.DruidDataSource

2.jasypt实现ENC加密步骤

2.1 引入pom依赖

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

2.2 生成密文

新建测试类代码如下:

@Test
    public void pwdTest() {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        // 加密算法
        encryptor.setAlgorithm("PBEWithMD5AndDES");
        // 可自定义
        encryptor.setPassword("MyPasswod2024");

        String encryptText = encryptor.encrypt("12345678");
        System.out.println("数据库密码加密后的数据:"+  encryptText);

        String decryptText = encryptor.decrypt(encryptText);
        System.out.println("数据库密码解密后的数据:" + decryptText);
    }

2.3 配置密文

如果生成的密文为“T4rdlSnwT&afahdLPRo9oi_”,则配置文件配置为“ENC(T4rdlSnwT&afahdLPRo9oi_)”。

3.注意

如果配置为密文后项目启动报错,可在配置文件中配置:

jasypt.encryptor.password:MyPasswod2024
jasypt.encryptor.algorithm:PBEWithMD5AndDES

如果还是报错,请检查SpringBoot版本和jasypt版本是否冲突。

你可能感兴趣的:(Java基础,spring,boot,后端,java,安全)