在日常项目开发中,我们可能要进行一些密码、密钥的配置,这些涉密信息如果以明文形式配置的话,很可能导致数据泄密,比如常见的数据库配置如下:
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
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>
新建测试类代码如下:
@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);
}
如果生成的密文为“T4rdlSnwT&afahdLPRo9oi_”,则配置文件配置为“ENC(T4rdlSnwT&afahdLPRo9oi_)”。
如果配置为密文后项目启动报错,可在配置文件中配置:
jasypt.encryptor.password:MyPasswod2024
jasypt.encryptor.algorithm:PBEWithMD5AndDES
如果还是报错,请检查SpringBoot版本和jasypt版本是否冲突。