导读


虽然项目的源代码配置是在application.properties文件中,但是,如果使用的是明文账密,还是处于不安全状态,一旦泄露,将会造成不可计量的损失,故而使用一个加密来加密必要的信息,使得数据库更安全。

步骤


这里使用 jasypt-spring-boot-starter 来处理加密字符。官网详情点击查看

1、导入依赖

  1. <!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
  2. <dependency>
  3. <groupId>com.github.ulisesbocchio</groupId>
  4. <artifactId>jasypt-spring-boot-starter</artifactId>
  5. <version>2.1.0</version>
  6. </dependency>

2、生产加密数据

  1. import org.jasypt.util.text.BasicTextEncryptor;
  2. public class EncryptionTest{
  3. public static void main(String[] args) {
  4. BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
  5. //自定义加密所需的salt(盐值)
  6. textEncryptor.setPassword("salt123456");
  7. //要加密的数据(数据库的用户名或密码,当然你要是想让URL加密,也是可以的)
  8. String username = textEncryptor.encrypt("root");
  9. String password = textEncryptor.encrypt("123456");
  10. System.out.println("username:" + username);
  11. System.out.println("password:" + password);
  12. }
  13. }

每次启动生成的数据都不一样,这次启动控制台打印:

  1. username:YxYODHKPIbPtwOBMdLbC7w==
  2. password:RV+Z9VVoDTDZsccOpDsrdw==
  3. Process finished with exit code 0

3、修改application.yml配置

  1. # 数据库四大组件
  2. spring:
  3. datasource:
  4. username: ENC(YxYODHKPIbPtwOBMdLbC7w==)
  5. password: ENC(RV+Z9VVoDTDZsccOpDsrdw==)
  6. url: jdbc:mysql://localhost:3306/dbtest?characterEncoding=UTF-8&serverTimezone=UTC
  7. driver-class-name: com.mysql.cj.jdbc.Driver
  8. # 默认加密方式PBEWithMD5AndDES,可以更改为PBEWithMD5AndTripleDES,这里我选择的是默认的
  9. jasypt:
  10. encryptor:
  11. password: salt123456 #你自定义的盐值
  12. # algorithm: PBEWithMD5AndTripleDES

然后直接启动项目就OK了,测试,可以获取到相应的数据。
image.png
注意:如果怕盐值也泄露出去,你可以使用命令启动的时候传入进去盐值。
例如:

  1. java -jar -Djasypt.encryptor.password=盐值 xxx.jar

完美解决。