# desensitization
**Repository Path**: liuwenya/desensitization
## Basic Information
- **Project Name**: desensitization
- **Description**: 数据脱敏
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2021-01-15
- **Last Updated**: 2021-01-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# desensitization
基于Java反射api、零依赖、简单易用、支持各种复杂数据结构的数据脱敏库,包含但不限于以下类型的数据脱敏:
* **邮箱**
* **手机号码**
* **中文名称**
* **身份证号码**
* **银行卡号码**
* **密码**
* **统一社会信用代码**
* **任意`CharSequence`类型的值**
* **级联脱敏**
# 用法
## jdk版本
大于等于1.8
## maven依赖
```xml
red.zyc
desensitization
2.4.3
```
## 例子
### 对象域值脱敏
下面是一个Child类,其中包含了一些敏感域以及一些嵌套的敏感域
```java
public class Child {
@ChineseNameSensitive
private String name = "李富贵";
@IdCardNumberSensitive
private String idCardNumber = "321181199301096000";
@UsccSensitive
private String unifiedSocialCreditCode = "91310106575855456U";
@CharSequenceSensitive
private String string = "123456";
@EmailSensitive
private String email = "123456@qq.com";
@PasswordSensitive
private String password = "123456";
@CascadeSensitive
private Mother mother = new Mother();
@CascadeSensitive
private Father father = new Father();
private @PasswordSensitive String[] passwords = {"123456", "1234567", "12345678"};
private List<@CascadeSensitive Parent> parents1 = Stream.of(new Father(), new Mother()).collect(Collectors.toList());
private List<@EmailSensitive String> emails1 = Stream.of("123456@qq.com", "1234567@qq.com", "1234568@qq.com").collect(Collectors.toList());
private Map<@ChineseNameSensitive String, @EmailSensitive String> emails2 = Stream.of("张三", "李四", "小明").collect(Collectors.toMap(s -> s, s -> "123456@qq.com"));
}
```
只需要在敏感数据字段上标记相应类型的敏感注解,例如`@ChineseNameSensitive`、`@EmailSensitive`等注解,如果你的数据字段是需要级联脱敏的对象,你只需要在该字段上标注`@CascadeSensitive`注解,最后调用以下方法即可擦除对象中的所有敏感信息然后返回一个新的Child对象。
```java
Child child = Sensitive.desensitize(new Child());
```
### 值脱敏
可能你的敏感信息是一个字符串类型的值或者是一个`Collection`、`Array`、`Map`之类的值,同样擦除它们的敏感信息也很简单:
```java
static void desensitize(){
// String
System.out.printf("字符串脱敏: %s%n", Sensitive.desensitize("123456@qq.com", new TypeToken<@EmailSensitive String>() {
}));
// Collection
System.out.printf("集合脱敏: %s%n", Sensitive.desensitize(Stream.of("123456@qq.com", "1234567@qq.com", "1234568@qq.com").collect(Collectors.toList()),
new TypeToken>() {
}));
// Array
System.out.printf("数组脱敏: %s%n", Arrays.toString(Sensitive.desensitize(new String[]{"123456@qq.com", "1234567@qq.com", "12345678@qq.com"},
new TypeToken<@EmailSensitive String[]>() {
})));
// Map
System.out.printf("Map脱敏: %s%n", Sensitive.desensitize(Stream.of("张三", "李四", "小明").collect(Collectors.toMap(s -> s, s -> "123456@qq.com")),
new TypeToken