Sage.Data.Mask
1.0.0.2
dotnet add package Sage.Data.Mask --version 1.0.0.2
NuGet\Install-Package Sage.Data.Mask -Version 1.0.0.2
<PackageReference Include="Sage.Data.Mask" Version="1.0.0.2" />
<PackageVersion Include="Sage.Data.Mask" Version="1.0.0.2" />
<PackageReference Include="Sage.Data.Mask" />
paket add Sage.Data.Mask --version 1.0.0.2
#r "nuget: Sage.Data.Mask, 1.0.0.2"
#:package Sage.Data.Mask@1.0.0.2
#addin nuget:?package=Sage.Data.Mask&version=1.0.0.2
#tool nuget:?package=Sage.Data.Mask&version=1.0.0.2
Sage.Data.Mask 数据脱敏库
简介
Sage.Data.Mask 是一个高性能、易用的 .NET 数据脱敏库,用于在显示或传输敏感数据时保护用户隐私。该库提供了丰富的脱敏方法,支持多种常见数据类型的脱敏处理,如邮箱、手机号、身份证号、银行卡号等。
特性
- 丰富的脱敏类型:支持 20+ 种常见数据类型的脱敏
- 高性能实现:经过性能优化,减少不必要的字符串操作和内存分配
- 易用的 API:提供扩展方法和静态方法两种调用方式
- 链式调用:支持方法链式调用,提升代码可读性
- 批量处理:支持批量数据脱敏,提高处理效率
- 自定义规则:支持自定义脱敏规则,满足特殊业务需求
- AOT 兼容:支持 .NET Native AOT 编译
安装
dotnet add package Sage.Data.Mask
快速开始
基本用法
using Sage.Data.Mask;
// 使用扩展方法
string email = "john.doe@example.com";
string maskedEmail = email.MaskEmail(); // 返回 "jo***e@example.com"
string phone = "13812345678";
string maskedPhone = phone.MaskPhone(); // 返回 "138****5678"
string idCard = "110101199001011234";
string maskedIdCard = idCard.MaskIdCard(); // 返回 "110101********1234"
使用 MaskType 枚举
using Sage.Data.Mask;
string email = "john.doe@example.com";
string maskedEmail = Maskers.Mask(email, MaskType.Email);
string phone = "13812345678";
string maskedPhone = Maskers.Mask(phone, MaskType.Phone);
string idCard = "110101199001011234";
string maskedIdCard = Maskers.Mask(idCard, MaskType.IdCard);
自定义脱敏规则
using Sage.Data.Mask;
string text = "abcdefghijk";
string masked = Maskers.Mask(text, 2, 2); // 返回 "ab*******jk"
批量脱敏处理
using Sage.Data.Mask;
using System.Collections.Generic;
var userData = new Dictionary<string, MaskType>
{
{ "john@example.com", MaskType.Email },
{ "13812345678", MaskType.Phone },
{ "110101199001011234", MaskType.IdCard },
{ "6222081234567890123", MaskType.BankCard }
};
var maskedData = Maskers.BatchMask(userData);
foreach (var item in maskedData)
{
Console.WriteLine($"原值: {item.Key} => 脱敏后: {item.Value}");
}
支持的脱敏类型
脱敏类型 | 方法 | 示例 |
---|---|---|
邮箱地址 | MaskEmail | john.doe@example.com → jo***e@example.com |
手机号码 | MaskPhone | 13812345678 → 138****5678 |
身份证号 | MaskIdCard | 110101199001011234 → 110101********1234 |
银行卡号 | MaskBankCard | 6222081234567890123 → 6222***********0123 |
姓名 | MaskName | 张三 → 张* |
地址 | MaskAddress | 北京市朝阳区建国门外大街1号 → 北京市朝阳区建***1号 |
密码 | MaskPassword | MyPassword123! → ****** |
IP地址 | MaskIpAddress | 192.168.1.1 → 192.168.. |
公司名称 | MaskCompanyName | 甲壳虫科技有限公司 → 甲壳虫科***公司 |
车牌号码 | MaskLicensePlate | 京A12345 → 京A*** |
护照号码 | MaskPassport | G12345678 → G******78 |
社保号码 | MaskSsn | 123456789012345 → 1234********345 |
即时通讯账号 | MaskImAccount | user123456 → use******6 |
URL地址 | MaskUrl | https://example.com/user?id=123 → https://***.com/user?id= |
出生日期 | MaskBirthDate | 1990-01-01 → 1990-- |
证件号码 | MaskDocumentNumber | AB123456 → AB***56 |
信用卡号 | MaskCreditCard | 4111111111111111 → 4111********1111 |
MAC地址 | MaskMacAddress | 00:1A:2B:3C:4D:5E → 00:1A:2B:3C:: |
GPS坐标 | MaskGpsCoordinates | 39.9042,116.4074 → 39.,116. |
IMEI号码 | MaskImei | 123456789012345 → 1234********345 |
驾驶证号 | MaskDriverLicense | 110101199001011234 → 110101********1234 |
序列号 | MaskSerialNumber | SN12345678 → SN******78 |
JWT Token | MaskJwtToken | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... → eyJ****...J9 |
高级用法
链式调用
using Sage.Data.Mask;
string userInfo = $"姓名: {user.Name.MaskName()}, 手机: {user.Phone.MaskPhone()}, 邮箱: {user.Email.MaskEmail() ?? "未提供"}";
自定义脱敏规则
using Sage.Data.Mask;
// 自定义脱敏规则 - 保留前3位和后5位
string sensitive = "sensitive-data-12345";
string custom = Maskers.Mask(sensitive, 3, 5); // 返回 "sen***12345"
// 批量自定义脱敏
var customRules = new[]
{
new { Value = "data1", Prefix = 1, Suffix = 1 },
new { Value = "data2", Prefix = 2, Suffix = 2 },
new { Value = "data3", Prefix = 0, Suffix = 4 }
};
foreach (var rule in customRules)
{
var masked = Maskers.Mask(rule.Value, rule.Prefix, rule.Suffix);
Console.WriteLine(masked);
}
在日志记录中使用
using Sage.Data.Mask;
// 记录用户登录信息,但保护敏感数据
logger.Info($"用户 {user.Name.MaskName()} 使用手机 {user.Phone.MaskPhone()} 登录系统,密码: {password.MaskPassword()}")
在API响应中使用
using Sage.Data.Mask;
// 返回用户信息,但脱敏敏感数据
public UserViewModel GetUserInfo(int userId)
{
var user = _userRepository.GetById(userId);
return new UserViewModel
{
Id = user.Id,
Name = user.Name, // 不脱敏
Email = user.Email.MaskEmail(), // 脱敏
Phone = user.Phone.MaskPhone(), // 脱敏
IdCard = user.IdCard.MaskIdCard() // 脱敏
};
}
性能优化
该库在设计时考虑了性能因素,采用了以下优化措施:
- 使用
AsSpan()
减少字符串切片分配 - 避免不必要的字符串操作和内存分配
- 优化分支逻辑,提高执行效率
- 使用
StringBuilder
处理复杂字符串拼接 - 缓存正则表达式实例,避免重复编译
许可证
本项目采用 Apache 2.0 许可证。详情请参阅 LICENSE 文件。
贡献
欢迎提交问题报告和改进建议。如果您想贡献代码,请提交拉取请求。
作者
- LiuPengLai - 甲壳虫科技 欢迎提交问题和功能请求。 QQ Group: 1054304346
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net9.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Sage.Data.Mask:
Package | Downloads |
---|---|
Sage.CloudStorage.Qiniu
Sage.CloudStorage.Qiniu 是一个基于 .NET 平台的现代化七牛云存储 SDK,采用完全异步设计,提供了对七牛云对象存储、CDN 等服务的简单易用的 API 封装。该库基于 Sage.Http 构建,具有高性能、可扩展的七牛云服务访问能力,特别适合企业级应用和大文件处理场景。 ## 核心优势 - **现代化API设计**:完全异步,符合.NET最佳实践 - **模块化架构**:各组件职责明确,易于扩展和维护 - **丰富的事件机制**:提供上传进度通知和完成事件 - **智能上传策略**:自动选择最佳上传方式和分片大小 - **完善的错误处理**:提供详细的错误信息和恢复机制 ## 功能特性 - **完整的对象存储支持**:上传、下载、管理、删除等操作 - **高级上传功能**: - 智能分片上传(自动优化分片大小) - 断点续传支持 - 并发控制 - 实时进度监控 - **CDN管理**:刷新、预取、带宽查询、日志下载 - **数据处理**:图片处理、音视频转码等 - **批量操作**:批量上传、删除等 |
GitHub repositories
This package is not used by any popular GitHub repositories.