文章目录

前言

在我们日常开发中,我们可能很随意把数据库密码直接明文暴露在配置文件中,在开发环境可以这么做,但是在生产环境,是相当不建议这么做,毕竟安全无小事,谁也不知道哪天密码就莫名其妙泄露了。今天就来聊聊在springboot项目中如何对数据库密码进行加密

实践

引入maven依赖

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

在Springboot配置文件中配置秘钥

jasypt:
  encryptor:
    password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7 

测试的时候可以这样写 秘钥放在配置文件是不太安全的
在IDE工具中我们可以将秘钥放在启动参数中
在这里插入图片描述

jasypt.encryptor.password=EbfYkitulv73I2p0mXI50JMXoaxZTKJ7

生产环境启动项目时添加参数即可

java -jar  -Djasypt.encryptor.password=EbfYkitulv73I2p0mXI50JMXoaxZTKJ7 xxx.jar

生成密文

建一个测试类来生成密码加密后的密文

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestDemo {
    @Autowired
    StringEncryptor stringEncryptor;//密码解码器自动注入

    @Test
    public void test() {
        String name = encryptor.encrypt("root");
        String password = encryptor.encrypt("123!@#");
        System.out.println(name);//n3UKAujtutC8u9qJaSm1uA==
        System.out.println(password );//bfc7g2lOcAP79kVGo9MmGA==
    }
}

也可以在本地通过Java命令生成 input 为要加密的内容 password为秘钥

java -cp  E:\repository\org\jasypt\jasypt\2.1.0\jasypt-2.1.0.jar
org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI
input="root" 
password=EbfYkitulv73I2p0mXI50JMXoaxZTKJ7

在配置文件使用
将配置文件中的明文密码改为加密后的密码 ,外面包一个ENC()

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/user?serverTimezone=UTC
    username: ENC(n3UKAujtutC8u9qJaSm1uA==)
    password: ENC(bfc7g2lOcAP79kVGo9MmGA==)

更多推荐