# desensitization
**Repository Path**: moon_half_moon/desensitization
## Basic Information
- **Project Name**: desensitization
- **Description**: desensitization是一个使用Java语言编写的数据脱敏工具类库,基于java反射在运行时动态擦除对象中的敏感信息
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://www.oschina.net/p/desensitization
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 13
- **Created**: 2024-09-04
- **Last Updated**: 2024-09-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# desensitization
基于Java反射api、简单易用、支持任意数据结构的数据脱敏库,包含但不限于以下类型的数据脱敏
* **邮箱**
* **手机号码**
* **中文名称**
* **身份证号码**
* **银行卡号码**
* **密码**
* **级联脱敏**
* **自定义注解脱敏**
# 用法
## JDK版本
desensitization是基于JDK21开发的,JDK1.8及以上版本请参考该[使用指南](https://github.com/allurx/desensitization/tree/v2.4.6)
## maven依赖
```xml
red.zyc
desensitization
3.0.0
```
## 例子
### 对象域值脱敏
下面是一个Child类,其中包含了一些敏感数据字段以及一些嵌套的敏感数据字段
```java
public class Child {
@ChineseName
public String name = "小明";
@PhoneNumber
public String phoneNumber = "19962000001";
@Password
public String password = "123456789";
@Cascade
public Father father;
}
```
只需要在敏感数据字段上标记相应类型的敏感注解,例如`@ChineseName`、`@Password`等注解,
如果这个数据字段是需要级联脱敏的对象,只需要在该字段上标注`@Cascade`注解,
最后调用以下方法即可擦除对象中的所有敏感信息并返回一个新的Child对象。
```java
var child = Sensitive.desensitize(new Child());
```
### 值脱敏
可能你的敏感信息是一个字符串类型的值或者是一个`Collection`、`Array`、`Map`之类的值,同样擦除它们的敏感信息也很简单
```java
void desensitize() {
// String
var v1 = Sensitive.desensitize("123456@qq.com", new AnnotatedTypeToken<@Email String>() {
});
assert "1*****@qq.com".equals(v1);
// Collection
var v2 = Sensitive.desensitize(Stream.of("123456@qq.com").collect(Collectors.toList()), new AnnotatedTypeToken>() {
});
v2.forEach(s -> {
assert "1*****@qq.com".equals(s);
});
// Array
var v3 = Sensitive.desensitize(new String[]{"123456@qq.com"}, new AnnotatedTypeToken<@Email String[]>() {
});
Arrays.stream(v3).forEach(s -> {
assert "1*****@qq.com".equals(s);
});
// Map
var v4 = Sensitive.desensitize(Stream.of("张三").collect(Collectors.toMap(s -> s, s -> "123456@qq.com")), new AnnotatedTypeToken