一、概述

数据脱敏(Data Masking),又称数据漂白、数据去隐私化或数据变形。

定义

指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。

脱敏规则

可以包括但不限于:

替换:例如将身份证号的部分数字替换为“*”或随机数。

随机化:例如生成与真实数据格式相符但与原始数据无关的新数据。

固定模式脱敏:例如保留电话号码的区号和最后几位,其余部分替换。

加密:对数据进行不可逆或可逆加密,仅在必要时解密。

假名化:用虚构的名字替换真实姓名。

二、数据脱敏开发

这里直接使用python代码开发,使用fastmcp框架。

server.py

from fastmcp import FastMCP
import re mcp = FastMCP("desensitize", port=9000) class DataMasker:
def __init__(self):
pass def mask_phone_number(self, phone_number):
"""
对手机号码进行脱敏处理,将中间四位替换为 *
"""
if len(phone_number) == 11:
return phone_number[:3] + "****" + phone_number[7:]
return phone_number def mask_email(self, email):
"""
对邮箱地址进行脱敏处理,只显示邮箱名前两位和域名
"""
if "@" in email:
username, domain = email.split("@")
return username[:2] + "****@" + domain
return email def mask_id_card(self, id_card):
"""
对身份证号码进行脱敏处理,只显示前四位和后四位
"""
if len(id_card) == 18:
return id_card[:4] + "**********" + id_card[14:]
return id_card def mask_address(self, address):
"""
对地址进行脱敏处理,模糊化门牌号和房间号
例如,将 "1栋" 替换为 "**栋","101室" 替换为 "***室"
"""
# 使用正则表达式
desensitized_address = re.sub(r"(\d+)栋", r"**栋", address)
desensitized_address = re.sub(r"(\d+)室", r"***室", desensitized_address)
return desensitized_address @mcp.tool()
def desensitize_text(text: str) -> str:
"""
脱敏文本信息
"""
masker = DataMasker()
# 匹配手机号
phone_pattern = r"\d{11}"
phones = re.findall(phone_pattern, text)
for phone in phones:
masked_phone = masker.mask_phone_number(phone)
text = text.replace(phone, masked_phone) # 匹配邮箱
email_pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
emails = re.findall(email_pattern, text)
for email in emails:
masked_email = masker.mask_email(email)
text = text.replace(email, masked_email) # 匹配身份证号
id_card_pattern = r"\d{18}"
id_cards = re.findall(id_card_pattern, text)
for id_card in id_cards:
masked_id_card = masker.mask_id_card(id_card)
text = text.replace(id_card, masked_id_card) # 匹配地址
address_pattern = r"([\u4e00-\u9fa5]+省)?([\u4e00-\u9fa5]+市)?([\u4e00-\u9fa5]+区)?([\u4e00-\u9fa5]+街道)?(\d+[\u4e00-\u9fa5]+)?(\d+[\u4e00-\u9fa5]+)?"
addresss = re.findall(address_pattern, text) # 如果没有找到地址,返回原始文本
if not addresss:
return text # 对每个匹配的地址进行脱敏处理
for address_parts in addresss:
# 将匹配的地址部分组合成完整的地址
address = "".join([part for part in address_parts if part])
if address:
# print("address",address)
masked_address = masker.mask_address(address)
text = text.replace(address, masked_address) return text if __name__ == "__main__":
mcp.run(transport="sse")

运行代码

python3 server.py

三、数据脱敏测试

打开Cherry Studio客户端,添加MCP服务器

添加智能体

将智能体添加到助手

开启MCP

聊天窗口,输入用户信息:

我的手机号是13812345678,我的邮箱是test@example.com,我的身份证号是123456789012345678,我的地址是北京市海淀区中关村大街1栋101室

可以看到返回的json,已经做了脱敏处理。

但是客户端返回的信息,有点不全。这是因为AI模型做了处理。因为AI模型认为这些敏感信息返回不安全,做了2次加工。

不过不影响,最终结果还是做了数据脱敏处理即可。

MCP数据脱敏应用开发的更多相关文章

  1. Oracle 11g数据脱敏

    Oracle 11g数据脱敏 前言 最近开发人员有个需求,导一份生产库的数据到测试库. 由于生产数据安全需要,需要并允许对导出的数据进行加密脱敏处理. 关于加密和脱敏 个人理解, 加密是通过一系列规则 ...

  2. Springboot 配置文件、隐私数据脱敏的最佳实践(原理+源码)

    大家好!我是小富- 这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号.密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小. 说起这 ...

  3. SpringBoot进阶教程(七十五)数据脱敏

    无论对于什么业务来说,用户数据信息的安全性无疑都是非常重要的.尤其是在数字经济大火背景下,数据的安全性就显得更加重要.数据脱敏可以分为两个部分,一个是DB层面,防止DB数据泄露,暴露用户信息:一个是接 ...

  4. 微软Connect(); 2017大会梳理:Azure、数据、AI开发工具

    在今天召开的 Connect(); 2017 开发者大会上,微软宣布了 Azure.数据.AI 开发工具的内容.这是第一天的 Connect(); 2017 的主题演讲. 在开场视频中霍金又来了.你记 ...

  5. 《MySQL Workbench数据建模与开发》

    <MySQL Workbench数据建模与开发> 基本信息 原书名:MySQL Workbench:Data Modeling & Development 原出版社: McGraw ...

  6. java 数据脱敏

    所谓数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份 ...

  7. Oracle汉字用户名数据脱敏长度不变,rpad函数使用

    信息安全考虑,有时需要对用户名称进行数据脱敏. 针对Oracle数据库,进行取数数据脱敏处理 脱敏规则: 长度小于9个字符,只保留前3个汉字与后3个汉字,中间全部由*填充. 长度9个字及以上及奇数,隐 ...

  8. php 数据脱敏显示

    /** * 数据脱敏 * @param $string 需要脱敏值 * @param int $start 开始 * @param int $length 结束 * @param string $re ...

  9. 聚合数据 iOS 项目开发实战:条码查询器

    记录下,聚合数据 iOS 项目开发实战:条码查询器:视频地址:http://www.jikexueyuan.com/course/324.html 条码查询API:https://www.juhe.c ...

  10. Azure、数据、AI开发工具

    Azure.数据.AI开发工具 在今天召开的 Connect(); 2017 开发者大会上,微软宣布了 Azure.数据.AI 开发工具的内容.这是第一天的 Connect(); 2017 的主题演讲 ...

随机推荐

  1. 转换流:InputStreamReader、OutputStreamWriter

    1.转换流涉及到的类:属于字符流InputStreamReader:将一个字节的输入流转换为字符的输入流解码:字节.字节数组 --->字符数组.字符串 OutputStreamWriter:将一 ...

  2. 基本类型、包装类与String类间的转换

  3. SCCPC2024 游记

    打了一堆板子,一个都没用上. 队友:zhicheng,nityacke 开场发现 H 是签到,NIT 签了.然后盯 F(圆向某个方向运动,问存不存在一个时刻使得全在长方形之内),发现不外乎一堆二次方程 ...

  4. linux配置maven

    1.下载mavenhttps://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/ 中找到相应的版本wget https://mirrors.tun ...

  5. 【忍者算法】从十字路口相遇到链表交点:探索相交链表问题|LeetCode第160题 相交链表

    从十字路口相遇到链表交点:探索相交链表问题 生活中的相遇问题 想象两个人从不同的地方出发,最后在一个十字路口相遇.他们可能走过不同长度的路程,但最终会在同一个点汇合.这就很像我们今天要讨论的相交链表问 ...

  6. 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体的替代品,可本地部署+知识库,注册即可有750w的token使用

    最近火山引擎推出了自家联网版的DeepSeekR1,并且加入了联网的功能,不用担心DeepSeek本体的服务器繁忙了,可以说直接是DeepSeek本体的替代品.现在注册即送30块体验价(相当于750w ...

  7. (自适应手机端)合同模板网站源码 合同范文类网站pbootcms模板

    PbootCMS内核开发的网站模板,该模板适用于合同范文网站.合同模板网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可: pc+wap,同一个后台,数据即时同步,简单适用!附带测试 ...

  8. C#开发手册

    一. 编码规范 (一)[强制]命名规范:所有命名(类名.属性名.变量名.常量名.属性名)必须以字母开头(a-z.A-Z),不能以特殊字符(_.$)开头.         1.[强制]类名命名规则:大驼 ...

  9. 【ABAQUS2023-Output Vars】使用记录

    计算结构的应变能,ALLSE=所有单元的ESEDEN*EVOL.但这不适用于模态分析,因为模态分析EVOL不能用 ALLSE Field: no History: yes .fil: automati ...

  10. 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理

    在 AI 编程领域国内外有一堆能叫的上号的应用: Cursor Windsurf Trae 阿里的「通义灵码」 百度的「文心快码」 字节跳动的「MarsCode」 科大讯飞的「iFlyCode」 Gi ...