# 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