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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Sage.Data.Mask" Version="1.0.0.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Sage.Data.Mask" Version="1.0.0.2" />
                    
Directory.Packages.props
<PackageReference Include="Sage.Data.Mask" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Sage.Data.Mask --version 1.0.0.2
                    
#r "nuget: Sage.Data.Mask, 1.0.0.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Sage.Data.Mask@1.0.0.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Sage.Data.Mask&version=1.0.0.2
                    
Install as a Cake Addin
#tool nuget:?package=Sage.Data.Mask&version=1.0.0.2
                    
Install as a Cake Tool

Sage.Data.Mask 数据脱敏库

NuGet License

简介

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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • 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.

Version Downloads Last Updated
1.0.0.2 273 8/25/2025
1.0.0.1 100 7/28/2025
1.0.0 118 7/16/2025