# data-desensitize-simple
**Repository Path**: aopmin/data-desensitize-simple
## Basic Information
- **Project Name**: data-desensitize-simple
- **Description**: 实现前端脱敏+数据库加密 组件
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-02-07
- **Last Updated**: 2026-02-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
基于代码结构分析,我来为这个项目生成一个完整的README文件:
# 数据脱敏与加密组件 (data-desensitize-simple)
## 项目简介
data-desensitize-simple 是一个专注于数据安全处理的Java开源项目,提供两大核心功能:
1. **数据脱敏模块 (data-desensitize)** - 基于注解的数据脱敏组件,支持手机号、身份证号、银行卡号等敏感信息的脱敏处理
2. **数据库加解密模块 (db-security)** - 基于MyBatis拦截器的自动加解密组件,支持字段级别的数据库加密存储
## 模块结构
```
├── data-desensitize # 数据脱敏核心模块
│ ├── core # 核心注解和组件
│ ├── enums # 脱敏规则和类型枚举
│ └── strategy # 脱敏策略实现
│
├── db-security # 数据库加解密模块
│ ├── annotation # 加密字段注解
│ ├── config # 自动配置类
│ ├── domain # 配置属性类
│ ├── Interceptor # MyBatis拦截器
│ └── util # 加解密工具类
│
└── data-desensitize-test # 使用示例和测试
```
## 功能特性
### 数据脱敏
- **注解驱动**:通过 `@Desensitize` 注解简单标记敏感字段
- **多种脱敏类型**:
- 手机号脱敏:保留前3后4位,中间用*号替代
- 身份证号脱敏:保留前3后4位
- 银行卡号脱敏:保留前4后4位
- **灵活扩展**:通过策略模式轻松添加新的脱敏类型
### 数据库加解密
- **透明加解密**:对标注 `@EncryptField` 的字段自动进行数据库层面的加密存储和解密读取
- **MyBatis集成**:基于拦截器实现,对业务代码无侵入
- **配置灵活**:支持算法、密钥、前缀等参数配置
- **开关控制**:可通过配置轻松启用或禁用加解密功能
## 技术栈
- Java 8+
- Spring Boot
- MyBatis-Plus
- Lombok
## 快速开始
### 1. 添加依赖
在项目的 `pom.xml` 中添加以下依赖:
```xml
cn.aopmin
data-desensitize
1.0.0
cn.aopmin
db-security
1.0.0
```
### 2. 数据脱敏使用
#### 2.1 在实体类上添加脱敏注解
```java
@Data
public class AccountVo {
private Long id;
private String username;
@JsonSerialize(using = SensitiveDataSerializer.class)
@Desensitize(type = DesensitizationType.PHONE)
private String phone;
@JsonSerialize(using = SensitiveDataSerializer.class)
@Desensitize(type = DesensitizationType.ID_CARD)
private String idCard;
@JsonSerialize(using = SensitiveDataSerializer.class)
@Desensitize(type = DesensitizationType.BANK_CARD)
private String bankCard;
}
```
#### 2.2 调用脱敏组件
```java
@Autowired
private DesensitizeComponent desensitizeComponent;
// 脱敏处理
desensitizeComponent.desensitize(originAccount, targetAccount);
// 单独脱敏手机号
String maskedPhone = desensitizeComponent.desensitizePhone("13812345678");
// 输出: 138****5678
```
### 3. 数据库加解密使用
#### 3.1 在实体类字段上添加加密注解
```java
@Data
@TableName("account")
public class Account {
@TableId(type = IdType.AUTO)
private Long id;
private String username;
@EncryptField
private String password;
@EncryptField
private String phone;
@EncryptField
private String idCard;
}
```
#### 3.2 添加配置
在 `application.yml` 中添加:
```yaml
db:
encrypt:
enabled: true # 是否启用加解密
algorithm: AES # 加密算法
secret-key: your-secret-key # 加密密钥
prefix: ENC # 密文前缀标识
```
#### 3.3 直接使用Mapper操作
加解密对业务完全透明,直接使用MyBatis-Plus的Mapper即可:
```java
@Autowired
private AccountMapper accountMapper;
// 新增时自动加密
Account account = new Account();
account.setPhone("13812345678");
account.setIdCard("110101199001011234");
accountMapper.insert(account); // 字段会自动加密存储
// 查询时自动解密
Account result = accountMapper.selectById(id); // 字段会自动解密返回
```
## 配置说明
### 数据库加解密配置
| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| `db.encrypt.enabled` | 是否启用加解密功能 | `true` |
| `db.encrypt.algorithm` | 加密算法(如:AES、DES) | `AES` |
| `db.encrypt.secret-key` | 加密密钥 | - |
| `db.encrypt.prefix` | 密文前缀标识,用于区分加密和未加密数据 | `ENC` |
### 脱敏类型
| 类型 | 说明 | 示例 |
|------|------|------|
| `PHONE` | 手机号脱敏 | `138****5678` |
| `ID_CARD` | 身份证号脱敏 | `110***********1234` |
| `BANK_CARD` | 银行卡号脱敏 | `6222**********1234` |
## 核心API
### DesensitizeComponent
```java
public void desensitize(Object origin, Object target)
// 将源对象的脱敏字段处理后复制到目标对象
public String desensitizePhone(String phone)
// 对手机号进行脱敏处理
```
### SecurityUtil
```java
public String encrypt(String plainText)
// 加密明文
public String decrypt(String cipherText)
// 解密密文
```
## 示例项目
`data-desensitize-test` 模块提供了完整的示例项目,包含:
- 实体类定义
- Controller接口
- Service层实现
- 单元测试
运行示例:
```bash
cd data-desensitize-test
mvn spring-boot:run
```
访问测试接口:
- `GET /account/{id}` - 获取脱敏后的账户信息
- `GET /get` - 测试加解密功能
## 扩展开发
### 添加新的脱敏类型
1. 在 `DesensitizationType` 枚举中添加新类型
2. 创建对应的策略实现类,实现 `DesensitizeStrategy` 接口
3. 使用 `@Component` 注解注册为Spring Bean
```java
@Component
public class NewTypeDesensitizeStrategyImpl implements DesensitizeStrategy {
@Override
public boolean support(DesensitizationType type) {
return type == DesensitizationType.NEW_TYPE;
}
@Override
public String desensitization(String data) {
// 实现脱敏逻辑
return data;
}
}
```
### 更换加密算法
1. 在 `EncryptProperties` 中配置新的算法名称
2. 确保JDK支持该算法或引入相应依赖
## 许可证
本项目采用 [MIT License](LICENSE) 开源协议。
## 贡献者
感谢所有为这个项目做出贡献的开发者!
## 联系方式
- 项目地址:https://gitee.com/aopmin/data-desensitize-simple
- 问题反馈:https://gitee.com/aopmin/data-desensitize-simple/issues