# rpamis-security
**Repository Path**: MumuIsMe/rpamis-security
## Basic Information
- **Project Name**: rpamis-security
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-18
- **Last Updated**: 2026-04-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
🔐 Rpamis-Security
中文
|
📖 文档
---
🎉 基于 MyBatis 插件开发的企业级数据安全组件
提供注解式数据脱敏和数据库自动加解密功能
---
## ✨ 核心特性
**🚀 开箱即用的企业级数据安全解决方案,让您专注于业务开发**
- 🎭 **数据脱敏** - 支持9种内置脱敏规则,灵活的自定义脱敏,支持任意实体类型
- 🔒 **数据库加解密** - 基于Mybatis插件的自动加解密,入库加密,出库解密,支持Wrapper条件加密
- 🛡️ **国密SM4** - 支持国家标准SM4对称加密算法(GB/T 32907-2016),支持ECB/CBC模式
- 🔐 **AES加密** - 支持AES-128/256加密,提供GCM/CBC/ECB三种模式,国际标准高性能方案
- 🧵 **线程安全** - 基于 ThreadLocal 的 Cipher 管理,完全兼容虚拟线程(JDK 21+)
- 📦 **任意类型支持** - 支持任意实体、List、Map,无论是否具有泛型,均支持脱敏和加解密
- 🔄 **嵌套脱敏** - 支持多层嵌套实体的脱敏,满足复杂场景需求
- ⚡ **零影响配置** - 加解密失败支持原值返回,不影响业务正常运行
- 📋 **深拷贝设计** - 新增入库后不改变源对象引用,支持save操作后继续操作对象
- 🔧 **高可扩展性** - 支持自定义加密算法、加解密类型处理器、脱敏类型处理器
- 🧪 **SQLite支持** - Demo使用SQLite数据库,零配置启动,便于快速验证
## 📦 快速安装
```xml
com.rpamis
rpamis-security-spring-boot-starter
r-1.2.0
```
**功能特性:**
- ✅ 支持 JDK 8+
- ✅ Spring Boot 2.x 支持
- ✅ javax.* 命名空间
- ✅ 全部加密算法(AES-GCM/CBC/ECB, SM4-CBC/ECB)
## ⚠️ 破坏性变更
### SM4 加密格式变更
从 `r-1.1.0` 版本开始,SM4 加密实现已从 hutool 迁移至 BouncyCastle,加密输出格式发生变更:
- **影响范围**: 旧版本 SM4 加密的数据无法在新版本中解密
- **迁移方案**: 使用新版本重新加密现有数据
- **新格式**: `S4E_` 或 `S4C_` + Base64(IV + 密文)
- **变更原因**:
- 移除 hutool 依赖,使用 BouncyCastle 原生实现
- CBC 模式采用随机 IV,安全性更高
- 输出格式与 AES 保持一致
### 自定义脱敏实现
数据脱敏功能已从 hutool 迁移至自定义实现,脱敏规则输出格式保持不变:
- 姓名: `张三` → `张*`
- 电话: `13812345678` → `138****5678`
- 身份证: `110101199003073328` → `110***********3328`
- 邮箱: `zhangsan@example.com` → `zhan****@example.com`
- 银行卡: `6222020200099998888` → `6222 **** **** 8888`
- 地址: `北京市朝阳区XX街道` → `北京市朝阳区********`
## 🎯 快速使用
### ⚙️ 加解密配置
#### AES-GCM(推荐)
```yaml
rpamis:
security:
enable: true
algorithm:
active: aes
aes:
key: MTIzNDU2Nzg5MDEyMzQ1Ng== # Base64 编码的 16 字节密钥
key-length: 128 # 128 或 256
mode: GCM # GCM、CBC 或 ECB
```
#### AES-CBC
```yaml
rpamis:
security:
enable: true
algorithm:
active: aes
aes:
key: MTIzNDU2Nzg5MDEyMzQ1Ng==
key-length: 128
mode: CBC
```
#### SM4-ECB(国密标准)
```yaml
rpamis:
security:
enable: true
algorithm:
active: sm4
sm4:
key: MTIzNDU2Nzg5MDEyMzQ1Ng== # Base64 编码的 16 字节密钥
mode: ECB # ECB 或 CBC(默认 ECB)
```
#### SM4-CBC(国密标准,推荐)
```yaml
rpamis:
security:
enable: true
algorithm:
active: sm4
sm4:
key: MTIzNDU2Nzg5MDEyMzQ1Ng== # Base64 编码的 16 字节密钥
mode: CBC # CBC 模式使用随机 IV,安全性更高
```
### 🔒 加解密注解
```java
public class User {
private Long id;
private String username;
@SecurityField // 自动加解密
private String password;
@SecurityField
private String idCard;
}
```
### 🎭 脱敏注解
```java
public class User {
private Long id;
private String username;
@Masked(type = MaskType.NAME_MASK)
private String name;
@Masked(type = MaskType.IDCARD_MASK)
private String idCard;
@Masked(type = MaskType.PHONE_MASK)
private String phone;
}
```
## 📚 更多资源
| 资源 | 链接 |
|-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 📖 **完整文档** | [网站文档](https://rpamis.github.io/rpamis-security/) |
| 🚀 **快速开始** | [快速开始指南](https://rpamis.github.io/rpamis-security/docs/quick-start) |
| 📐 **架构设计** | [架构设计文档](https://rpamis.github.io/rpamis-security/docs/architecture) |
| 💡 **使用示例** | [示例代码](https://rpamis.github.io/rpamis-security/docs/examples) |
| 🔧 **API 参考** | [API 文档](https://rpamis.github.io/rpamis-security/docs/api) |
| 🔐 **AES 加密模块** | [AES 模块文档](docs/aes-encryption.md) |
| 🛠️ **开发指南** | [二次开发指南](docs/developer-guide.md) |
| 🧠 **原理解析** | [技术背景](https://benym.cn/notes/08-open-source-project/01-rpamis/03-security/02-rpamis-security-technical-background) / [原理分析](https://benym.cn/notes/08-open-source-project/01-rpamis/03-security/03-rpamis-security-principle-analysis) |
## 🏆 组件优势
| 特性 | Rpamis-Security | 同类项目 |
|-----------------|----------------------------|-----------|
| 支持任意实体类型脱敏 | ✅ 支持 List、Map、无泛型实体 | ❌ 仅支持单一实体 |
| 支持嵌套脱敏 | ✅ 支持多层嵌套 | ❌ 不支持 |
| 自动加解密 | ✅ 支持动态 SQL | ❌ 功能受限 |
| 国密 SM4 | ✅ 支持(ECB、CBC) | 部分支持 |
| AES 加密 | ✅ 支持(GCM、CBC、ECB、128/256位) | ❌ 不支持 |
| 线程安全 | ✅ ThreadLocal Cipher | ❌ 无法保证 |
| 虚拟线程 | ✅ JDK 21+ 兼容 | ❌ 未测试 |
| 加解密失败处理 | ✅ 支持原值返回 | ❌ 不支持 |
| 深拷贝设计 | ✅ 不改变源对象引用 | ❌ 不支持 |
| 单测覆盖率 | ✅ 82%+ / 78+ 场景 | ❌ 无 |
## 🔄 版本兼容性
| 版本 | JDK | Spring Boot | Starter 组件 |
|----------|-----|-------------|---------------------------------------|
| r-1.2.0+ | 8+ | 2.x | `rpamis-security-spring-boot-starter` |
**支持功能:**
- ✅ AES-128/256(GCM、CBC、ECB 模式)
- ✅ SM4(CBC、ECB 模式)
- ✅ MyBatis Plus 集成
- ✅ Wrapper 条件自动加密
- ✅ 全部数据脱敏功能
## 🤝 参与贡献
Rpamis-Security 100% 由开源社区的热情驱动
欢迎您的贡献和反馈!查看 贡献指南 了解更多
## 📄 开源协议
本项目基于 [Apache 2.0](LICENSE) 协议开源。
---
Made with ❤️ by Rpamis Team