代码连接【https://gitee.com/pengmqqq/sensitive-data-encryption】
介绍
后端敏感数据加密的一些解决方案,包括:
- 配置文件敏感数据加解密
- 前端传输敏感数据加解密
- 数据库获取的敏感数据加解密
软件架构
配置文件数据脱敏: Jasypt + AES
前后端传输以及数据库存储数据脱敏:AOP + AES
使用说明
-
配置文件数据脱敏
将需要脱敏的数据进行加密之后再放入配置文件(注意要使用解密算法配套的加密算法)例如:
test: password: Enc(tKWTx+XSlLlJFdLOIQPKYQ==)
-
前后端传输以及数据库存储数据脱敏:
在需要加密/解密的属性/参数上增加注解 @EncryptField
@Data @Accessors(chain = true) public class User { private Integer id; private String name; @EncryptField private String phone; @EncryptField private String email; private Integer age; }
在需要对参数加密的方法上增加注解 @NeedEncrypt
@NeedEncrypt public void addAll(List<User> user) { users.addAll(user); System.out.println(""); }
在需要对返回值解密的方法上增加注解 @NeedDecrypt
例如某些需要访问第三方平台的操作,从数据库取到的是加密的数据,代码中需要进行解密再发送给第三方平台进行认证
@NeedDecrypt public List<User> findAll() { ArrayList<User> list = new ArrayList<>(users); return list; }
实现方案
配置文件数据脱敏:
-
pom文件引入依赖:
<!-- 依赖aop --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!--配置密码加密--> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.4</version> </dependency>
-
配置文件 application.yml 新增jasypt相关配置:
jasypt: encryptor: property: # 算法识别的前后缀,默认ENC(),包含在前后缀的加密信息,会使用指定算法解密 prefix: Enc( suffix: ) bean: desencrypt # 指定自定义加密算法的bean test: password: Enc(tKWTx+XSlLlJFdLOIQPKYQ==) # 加密数据
-
新增自定义算法类:
@Component("desencrypt") public class JasyptAlgorithmConfig implements StringEncryptor { @Override public String encrypt(String message) { return AESUtils.encrypt(message,AESUtils.getKey()); } @Override public String decrypt(String encryptedMessage) { return AESUtils.decrypt(encryptedMessage,AESUtils.getKey()); }
-
新增加密工具类:
public class AESUtils { private static final String USER_PWD_KEY = "A39DSSSDFGS4OaHr"; private static final Charset CHARSET = Charset.forName