← 返回 Skill 列表
extension
分类: 数据与分析无需 API Key

数据脱敏器 · 表格与文本敏感信息遮蔽

一款面向合规场景的本地数据脱敏工具。把数据交给外部之前(发给同事、提工单、 喂给分析工具、上传第三方系统),先用它把个人敏感信息遮掉。 核心能力: ① 五类敏感模式——手机号(含 +86 国家码)、18 位身份证、16-19 位银行卡 (支持空格/短横线分隔)、邮箱、IPv4;按"更具体优先"排序扫描,重叠只取一次, 避免同一段文本被重复遮挡; ② 三种脱敏模式—— · partial 部分遮挡:保留头尾便于人工核对(138****8000),默认; · full 整体替换:替换为 <PHONE>/<ID> 等语义占位符; · hash 一致化假名:同一原值恒定映射到同一假名(P_ab12cd34),加盐后不可逆, 且跨文件保持一致,脱敏后仍可做关联分析(如按手机号统计复购); ③ 两处作用范围——`--auto` 全文自动识别敏感模式;`--columns 姓名,手机号` 对表格 指定列整列脱敏(用于姓名、地址这类无固定格式的字段); ④ 保真写回——自动探测 UTF-8/GBK 与 BOM,写回时保留原编码、原 BOM 状态、 原换行符(LF/CRLF 不被改写),避免"脱敏一次文件全变了"; ⑤ 安全默认——默认只生成 .masked 副本,不碰原文件;`--inplace` 才覆盖且强制先 备份 .bak;`--dry-run` 只统计不写盘。 纯 Python 标准库实现,零第三方依赖,全程离线,数据不离开使用环境。 适用边界:面向文本与分隔符表格;二进制 Office 文档(.xlsx/.docx)请先另存为 CSV,或用同系列表格工具处理。不做数据加密与访问控制,脱敏≠加密。

person作者: user_98493706hubcommunity

数据脱敏器

数据对外之前,先把不该露的遮掉。

触发规则

| 用户意图 | 处理 | |----------|------| | 这份数据要发给别人,先脱敏 | 用 --auto 全文自动识别 + 默认部分遮挡 | | 把手机号/身份证遮掉 | --auto --types 手机号,身份证 | | 姓名/地址这种没有固定格式的列也要遮 | 用 --columns 姓名,地址 指定列 | | 脱敏后还要能按人做统计 | 用 --mode hash 一致化假名 | | 只想看看会脱敏掉什么,先别改文件 | 加 --dry-run | | 只是问本技能能干嘛 | 仅介绍,不执行任何操作 |

依赖

| 依赖 | 用途 | |------|------| | Python 3.8+ | 运行 scripts/mask_data.py(仅用标准库) |

无需联网、无需安装任何第三方包。

快速开始

# 先试运行,看看会命中什么(不写任何文件)
python3 scripts/mask_data.py data/ --auto --dry-run

# 自动识别脱敏,输出到指定目录(原文件不动)
python3 scripts/mask_data.py data/ --auto --out out/masked

# 只处理手机号与身份证
python3 scripts/mask_data.py data/ --auto --types 手机号,身份证 --out out/

# 指定列整列脱敏(姓名、地址等无固定格式字段)
python3 scripts/mask_data.py users.csv --columns 姓名,联系地址 --out out/

# 一致化假名:脱敏后仍可做关联分析
python3 scripts/mask_data.py orders.csv --auto --mode hash --salt <盐值> --out out/

# 就地覆盖(自动生成 .bak 备份)
python3 scripts/mask_data.py app.log --auto --inplace

参数

| 参数 | 说明 | 默认 | |------|------|------| | --auto | 自动识别五类敏感模式 | 关 | | --columns A,B | 对表格指定列整列脱敏(逗号分隔) | — | | --mode | partial / full / hash | partial | | --keep-head N | 部分遮挡保留前 N 字符 | 3 | | --keep-tail N | 部分遮挡保留后 N 字符 | 4 | | --mask-char C | 遮挡字符 | * | | --salt STR | 假名模式的盐值(需自行保管) | 内置默认 | | --out DIR | 输出目录 | 同目录 + .masked | | --inplace | 就地覆盖(先备份 .bak) | 关 | | --types a,b | 自动识别时只处理指定类型 | 全部 | | --dry-run | 只统计不写文件 | 关 | | --report PATH | 输出 JSON 统计报告 | — | | --preview N | 终端预览前 N 条替换样例 | 5 | | --encoding ENC | 强制输入编码 | 自动探测 |

--auto 与 --columns 至少指定其一,否则工具报错退出(rc=2),避免"什么都没做却以为做了"。 --inplace 与 --out 互斥。

敏感模式与识别口径

| 类型 | 识别规则 | 占位符 | |------|----------|--------| | 身份证 | 18 位,首位非 0,含合法年月日段,末位数字或 X,前后非字母数字 | <ID> | | 银行卡 | 16–19 位数字,允许空格/短横线分隔 | <BANKCARD> | | 手机号 | 1[3-9] 开头共 11 位,可带 +86 / 86 前缀与分隔符 | <PHONE> | | 邮箱 | 常规局部@域名.顶级域,顶级域至少 2 位字母 | <EMAIL> | | IPv4 | 四段 0–255,前后非数字与点(避免匹配版本号片段) | <IP> |

扫描采用"站点式"重叠消解:所有模式先各自找出候选区间,再按起点排序、 起点相同取更长者,重叠的后到者丢弃。因此身份证不会被银行卡规则二次命中, 一段文本只被遮挡一次。

三种脱敏模式

| 模式 | 效果 | 适用 | |------|------|------| | partial | 13800138000 → 138****8000 | 默认。保留头尾,便于人工比对与排查 | | full | zhang@example.com → <EMAIL> | 完全不保留原值特征,用于对外发布 | | hash | 同值 → 同假名 P_def4cb922e | 脱敏后仍需按主体关联统计(复购率、活跃度等) |

hash 模式说明:

  • 算法为 sha256(盐值 + 原值) 取前 10 位十六进制,加盐后不可逆推;
  • 同一盐值下,同一原值恒定得到同一假名,同一文件内与跨文件均一致;
  • 换不同盐值得到完全不同的假名,盐值不同则两份数据无法关联;
  • 盐值需自行保管:同盐值可复现映射关系,盐值泄露则弱值(如手机号)可被字典碰撞反推。

保真写回

| 项 | 处理 | |---|---| | 编码 | 自动探测 UTF-8 / GBK / latin-1,按原编码写回 | | BOM | 原有则保留、原无则不加(不引入多余 BOM) | | 换行符 | 原样保留,LF 不被改写成 CRLF | | 分隔符 | CSV 自动嗅探 , / TAB / ; / | 并原样写回 | | 原文件 | 默认不动;--inplace 覆盖前先写 .bak 备份 |

Agent 执行要求

  1. 先试运行:任何写入前,先跑 --dry-run 并把命中统计与样例给用户确认, 避免误伤(例如把订单号当作手机号遮掉)。
  2. 只读优先:用户没明确要求覆盖时,一律用 --out 输出副本,不动原文件。
  3. 不臆断:--columns 指定的列名若不存在于表头,工具不会报错也不会默默改别的列—— Agent 应核对实际表头后重试,不得猜列名。
  4. 脱敏≠加密:向用户说明本工具降低的是"可直接阅读"的风险,不提供加密与访问控制; 高敏感数据仍需配合权限管理与传输加密。
  5. 盐值提示:使用 hash 模式时提醒用户妥善保管盐值,不要把盐值一起对外提供。
  6. 结果复核:写盘后应抽查输出文件,确认敏感值确已遮蔽、非敏感值未被误改。

输出模板

## 数据脱敏结果

- 模式:partial(保留头 3 尾 4) 范围:自动识别 手机号/身份证/银行卡/邮箱/IPv4
- 共脱敏 14 处

| 类型 | 处数 |
|---|---|
| 手机号 | 4 |
| 邮箱 | 4 |
| 身份证 | 3 |
| IPv4 | 2 |
| 银行卡 | 1 |

### 替换样例
- 手机号:13800138000 → 138****8000
- 身份证:11010519900307891X → 110***********891X
- 邮箱:zhang@example.com → zha**********.com

(输出:out/masked/cust.csv、out/masked/app.log 原文件未改动)

注意事项

  • 禁止在未备份的情况下就地覆盖;--inplace 会自动生成 .bak,仍建议先试运行。
  • 不处理二进制格式(.xlsx/.docx/.pdf),需先转为 CSV 或文本。
  • 不读取与目标无关的目录,不扫描用户主目录。
  • 不实现加密、水印、访问审计;不保证覆盖所有可能的敏感形态(如护照号、车牌、 自定义工号),特殊格式需用户提供正则或改用文本提取工具自行处理。
  • 全程离线运行,脱敏结果不写入任何远端服务。