隐私数据脱敏
1、引入依赖
<!--jasypt加解密--><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.4</version></dependency>
2、加解密配置
配置文件加入秘钥配置项jasypt.encryptor.password,
并将需要脱敏的value值替换成预先经过加密的内容ENC(加密后的字符串)
例如:
jasypt:
encryptor:
password: asdaszdsad
3、api调用
@SpringBootTest
public class DarkCloudTest {
@Autowired
private StringEncryptor stringEncryptor;
@Test
void encryptPwd() {
//加密
System.out.println("加密root: " + stringEncryptor.encrypt("root"));
System.out.println("加密druid: " + stringEncryptor.encrypt("druid"));
System.out.println("加密123456: " + stringEncryptor.encrypt("123456"));
}
}
4、使用加密
spring:
datasource:
url: jdbc:mysql://localhost:3306/db1?useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&ze oDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
username: root
password: ENC(mVTvp4IddqdaYGqPl9lCQbzM3H/b0B6l)
5、自定义加密写法
ENC()是默认的写法,我们可以进行定义并自定义格式
jasypt:
encryptor:
property:
prefix: "abc["
suffix: "]"
参数注入启动
秘钥是个安全性要求比较高的属性,所以一般不建议直接放在项目内,可以通过启动时-D参数注入,或者放在配置中心,避免泄露
java -jar -Djasypt.encryptor.password=1123 jasypt.jar
AOP全局处理
对于某些情况下可能有多个数据需要进行加密,从数据库查询出来之后需要解密
这个时候可以使用AOP进行切面编程,全局处理,高效快捷
而且还是无侵入式的
自定义注解
@EncryptField/@EncryptMethod
在使用的地方添加注解即可
通常对用户的隐私数据进行加密,比如手机号、身份证或者一些账号配置等信息,入库时都要进行不落地脱敏,也就是在进入我们系统时就要实时的脱敏处理。
定义如下:
@Documented
@Target({ElementType.FIELD,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface EncryptField {
String[] value() default "";
}
@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface EncryptMethod {
String type() default ENCRYPT;
}
public interface EncryptConstant {
String ENCRYPT = "encrypt";
String DECRYPT = "decrypt";
}
测试实体
@Data
public class User {
private Long userId;
@EncryptField
private String mobile;
@EncryptField
private String address;
private String age;
}
切面编程
对其进行入参加密,返回结果解密
