为了简化运维工作,使用nacos作为配置中心,但很多敏感数据都是明文存储的,这样一旦数据泄露,可能会造成很大影响,所以最好把这些数据进行加密处理,下面介绍几种数据的加密。
一、数据库信息加密
数据库的配置本篇介绍两种,一是使用druid
连接池的,这种比较常见;二是使用dynamic-datasource
多数据源配置的。
1.1 使用druid
连接池
正常配置如下:
# 数据源配置
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=GMT%2B8username: rootpassword: 123456... ... <省略其他配置>
下面进行改造,首先引入jasypt
,目前最新版本是3.0.5
<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.5</version>
</dependency>
创建一个配置类JasyptConfig
(类名自定义)
@Configuration
public class JasyptConfig {@Bean("jasyptStringEncryptor")public StringEncryptor stringEncryptor() {StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();// 设置加密密码/盐,自定义,可配置在配置中心,但不推荐encryptor.setPassword("acbdefg1234567890");// 加密算法 可选 PBEWithMD5AndDES、PBEWithHmacSHA512AndAES_256,3.0版本后推荐使用第二种encryptor.setAlgorithm("PBEWithMD5AndDES");encryptor.setIvGenerator(new org.jasypt.iv.NoIvGenerator());return encryptor;}
}
单独写一个工具类来加密明文数据
创建一个工具类`JasyptUtil`
```java
public class JasyptUtil {public static final String KEY = "acbdefg1234567890";/*** 加密算法 可选 PBEWithMD5AndDES、PBEWithHmacSHA512AndAES_256*/public static final String ALGORITHM = "PBEWithMD5AndDES";public static void main(String[] arg) {StandardPBEStringEncryptor encryptor = stringEncryptor();String name = encryptor.encrypt("root");String password = encryptor.encrypt("123456");//密码进行加密System.out.println("加密后账号:" + name);System.out.println("加密后密码:" + password);}/*** 生成加密器* @return*/public static StandardPBEStringEncryptor stringEncryptor() {StandardPBEStringEncryptor textEncryptor = new StandardPBEStringEncryptor();textEncryptor.setPassword(KEY);textEncryptor.setAlgorithm(ALGORITHM);textEncryptor.setIvGenerator(new org.jasypt.iv.NoIvGenerator());return textEncryptor;}
}
执行后得到
然后使用加密过的账号和密码替换原有的明文账号密码,如下
# 数据源配置
spring:datasource: