影刀RPA新手教程:数据脱敏与隐私保护实战——合规处理敏感数据
影刀RPA新手教程数据脱敏与隐私保护实战——合规处理敏感数据0. 为什么要做脱敏采集回来的数据里可能全是敏感信息客户手机号、身份证号、邮箱、家庭地址、银行卡号。直接存是违规的个人信息保护法第17条但要分析业务数据又离不开这些字段。解决方案脱敏。脱敏就是在保留数据特征的前提下抹去可识别个人身份的部分。比如手机号13812345678 → 138****5678保留了运营商段和后4位做业务分析。这篇给脱敏的正则表达式、加密存储方案和配置化规则表。1. 认识影刀与安装脱敏流程需要安装cryptography库用于加密pip install cryptography影刀的Python环境安装加密库时可能遇到编译错误cryptography依赖C扩展。解决不要pip install cryptography用预编译的wheel包。从pypi.org下载对应Python版本和Windows版本的.whl文件本地pip install路径。影刀自带的Python是32位的还是64位的要确认好。打开Python代码块输入import struct; print(struct.calcsize(P) * 8)32位打印32、64位打印64。2. 元素定位四合一敏感数据可能来自多种数据源每种定位方式不同Excel文件中的数据openpyxl读取定位到具体Sheet和列。源文件路径统一放在配置文件里conf/source_path.txt。网页上的用户列表用批量数据抓取指令选中用户信息表格一次性导出所有行的名称、手机、邮箱列。CSV/文本文件Python的csv模块直接读注意encoding——不是所有文件都是UTF-8很多是GBK。读之前先探测编码先用chardet包chardet.detect(raw_bytes)90%准确率。API返回的JSON数据response.json()后按key取值敏感字段通常是phone/mobile/id_card/email/address这些命名。3. 变量与数据类型脱敏规则配置表的数据结构——不建议把正则硬编码在代码里用配置文件让运营也能改规则rules{手机号:{regex:r1[3-9]\d{9},method:mask_middle,params:{keep_head:3,keep_tail:4,mask_char:*}},身份证:{regex:r\d{17}[\dXx],method:mask_middle,params:{keep_head:6,keep_tail:4,mask_char:*}},邮箱:{regex:r[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,},method:mask_email,params:{keep_head:3,mask_char:*}},银行卡:{regex:r\d{16,19},method:mask_middle,params:{keep_head:6,keep_tail:4,mask_char:*}},地址:{regex:None,# 不用正则用前后缀匹配method:mask_address,params:{keep_level:2}# 保留到市级}}脱敏方法实现importredefmask_middle(text,keep_head3,keep_tail4,mask_char*):iflen(text)keep_headkeep_tail:returntextreturntext[:keep_head]mask_char*(len(text)-keep_head-keep_tail)text[-keep_tail:]4. 流程控制脱敏主流程读数据文件 → 解析表头找到敏感字段 → 根据字段名匹配脱敏规则 → 逐条脱敏 → 写入脱敏版Excel → 原始数据加密。字段名匹配不是精确匹配是模糊匹配——用户手机、联系电话、mobile_phone都要匹配到手机号规则。实现FIELD_MAPPING{手机号:[手机,电话,mobile,phone,tel,contact],身份证:[身份证,id_card,idcard,证件号],邮箱:[邮箱,email,mail,e-mail],银行卡:[银行卡,bank_card,卡号,account],地址:[地址,住址,address,通讯地]}defmatch_rule(field_name):field_lowerfield_name.lower()forrule_name,keywordsinFIELD_MAPPING.items():forkwinkeywords:ifkwinfield_lower:returnrule_namereturnNone# 非敏感字段不需要脱敏脱敏时加上异常处理forrow_idxinrange(2,ws.max_row1):forcol_idx,headerinenumerate(headers,1):cell_valuestr(ws.cell(rowrow_idx,columncol_idx).valueor)rule_namematch_rule(header)ifrule_nameandcell_value:rulerules[rule_name]try:maskedapply_mask(cell_value,rule)exceptExceptionase:print(f脱敏失败(R{row_idx}C{col_idx}):{e})masked***脱敏失败***masked_ws.cell(rowrow_idx,columncol_idx,valuemasked)else:masked_ws.cell(rowrow_idx,columncol_idx,valuecell_value)5. 网页自动化如果敏感数据需要从网页上采集后再脱敏核心是要有个中间态——采集下来先在内存里脱敏再存盘。不要先存盘再脱敏中间那段时间原始数据已经留在磁盘上了。影刀流程打开网页 → 获取元素列表 → 循环每个元素取text → 在Python代码块里脱敏 → 存入变量 → 循环结束后统一写入Excel。全程不落地原始数据。如果要采集的数据量太大不得不中途落盘落盘后马上加文件锁——用Python的os.chmod(path, 0o600)设置只有当前用户可读写。脱敏完成后删除临时文件os.remove(path)。6. 数据处理核心正则表达式都在这了拿去直接能用# 手机号支持86前缀、空格、短横线PHONE_REGEXr(?:\86[-\s]?)?1[3-9]\d[-\s]?\d{4}[-\s]?\d{4}# 身份证18位末尾X不区分大小写ID_CARD_REGEXr\d{17}[\dXx]# 邮箱EMAIL_REGEXr[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}# 银行卡16-19位数字BANK_CARD_REGEXr\d{16,19}# IPv4地址IP_REGEXr\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}邮箱脱敏不是简单mask_middledefmask_email(email,keep_head3,mask_char*):name,domainemail.split()masked_namemask_middle(name,keep_headkeep_head,keep_tail0,mask_charmask_char)# 域名部分只保留一级域名前面用*替代domain_partsdomain.split(.)masked_domainmask_char*3...join(domain_parts[1:])returnmasked_namemasked_domain# 输出示例zha******.com地址脱敏保留省/市级defmask_address(address):# 匹配省、自治区、直辖市province_matchre.match(r([^省]省|[^市]市|[^区]自治区),address)# 匹配市city_matchre.search(r([^市]市),address)resultifprovince_match:resultprovince_match.group(0)ifcity_match:resultcity_match.group(0)result******returnresult# 浙江省杭州市西湖区文三路100号 → 浙江省杭州市******7. 鼠标键盘图像自动化数据脱敏一般不涉及鼠标键盘操作。但如果脱敏后要发布到某个系统比如CRM系统里更新客户信息可能涉及网页表单填写。影刀打开CRM系统 → 定位到对应客户编辑页 → 脱敏后的数据通过「写入文本」指令填入输入框 → 点击保存。这一过程和正常的RPA表单填写一样只是数据是脱敏后的版本。8. 进阶技能加密存储原始数据脱敏后不能直接丢弃审计时需要还原。原始数据要用AES加密存储。fromcryptography.fernetimportFernetimportosimportbase64importhashlibdefgenerate_key(password):# 从密码生成32字节密钥digesthashlib.sha256(password.encode()).digest()returnbase64.urlsafe_b64encode(digest)defencrypt_file(input_path,output_path,password):keygenerate_key(password)fernetFernet(key)withopen(input_path,rb)asf:dataf.read()encryptedfernet.encrypt(data)withopen(output_path,wb)asf:f.write(encrypted)defdecrypt_file(input_path,output_path,password):keygenerate_key(password)fernetFernet(key)withopen(input_path,rb)asf:encryptedf.read()try:decryptedfernet.decrypt(encrypted)exceptException:raiseValueError(密码错误或文件损坏)withopen(output_path,wb)asf:f.write(decrypted)密码不要硬编码。用环境变量读取password os.environ.get(ENCRYPT_KEY, default_fallback_key)。生产环境里通过影刀的「配置变量」设置和代码解耦。加密后的文件扩展名用.enc标记一眼就看出是加密文件不会误打开。9. 平台实战Excel数据脱敏数据库脱敏Excel数据脱敏最常见场景运营从网站导出的客户列表要发给市场部做分析但数据含手机号身份证。方案准备一个Excel模板第一行是列名。下面是一个Python脚本接受一个规则配置JSON读取Excel、匹配列名、脱敏、输出到新文件defdesensitize_excel(input_file,output_file,rules_config):wbopenpyxl.load_workbook(input_file)wswb.active headers[cell.valueforcellinws[1]]# 构建脱敏映射col_rules{}forcol_idx,headerinenumerate(headers):rule_namematch_rule(str(header))ifrule_name:col_rules[col_idx1]rules_config[rule_name]# 处理每一行out_wbopenpyxl.Workbook()out_wsout_wb.activeforrow_idxinrange(1,ws.max_row1):forcol_idxinrange(1,ws.max_column1):valws.cell(rowrow_idx,columncol_idx).valueifrow_idx1:# 表头原封out_ws.cell(rowrow_idx,columncol_idx,valueval)elifcol_idxincol_rulesandval:maskedapply_mask(str(val),col_rules[col_idx])out_ws.cell(rowrow_idx,columncol_idx,valuemasked)else:out_ws.cell(rowrow_idx,columncol_idx,valueval)out_wb.save(output_file)数据库脱敏直接用SQL做脱敏比Python更快。10万行数据用SQL UPDATE一条就跑完Python循环10万次要几分钟。-- MySQL手机号脱敏UPDATEcustomersSETphoneCONCAT(LEFT(phone,3),****,RIGHT(phone,4));-- 身份证脱敏UPDATEcustomersSETid_cardCONCAT(LEFT(id_card,6),********,RIGHT(id_card,4));-- 邮箱脱敏UPDATEcustomersSETemailCONCAT(LEFT(email,3),******.,SUBSTRING_INDEX(email,.,-1));但是注意不要直接在原表上UPDATE。先CREATE TABLE xxx_desensitized AS SELECT在新表上做脱敏。原表数据不动加密备份后可以还原。10. 系统联动脱敏整个流程串起来采集原始数据 → 脱敏 → 写入脱敏版文件 → 原始数据加密 → 删除原始明文文件 → 发送通知。通知包含脱敏统计defnotify_stats(stats):textf【数据脱敏完成】 处理行数{stats[total_rows]}脱敏字段数{stats[masked_fields]}手机号脱敏{stats[phone_count]}条 身份证脱敏{stats[id_card_count]}条 邮箱脱敏{stats[email_count]}条 脱敏规则版本{stats[rules_version]}处理时间{stats[elapsed]}秒requests.post(WEBHOOK_URL,json{msgtype:markdown,markdown:{content:text}})脱敏日志写入审计文件按日期分割。每条记录包含时间、文件名、处理行数、脱敏规则版本、加密状态、操作人。配一个「查看日志」的简单HTML页面方便审计。home.linyan.cloud上有脱敏规则模板的下载链接包含常见50种敏感字段的正则表达式。11. 工程化与规范脱敏工程的规范一、规则版本管理。脱敏规则存JSON文件用Git管理。每次修改规则打tagv1.0.0→v1.1.0。每条脱敏记录写上规则版本号出了问题知道是哪个版本的时候出的。二、测试脱敏。修改规则后跑测试集不是跑真实数据。测试集包含所有字段类型的样本数据验证脱敏结果是否符合预期test_data{手机号:{input:13812345678,expected:138****5678},身份证:{input:330106199001011234,expected:330106********1234},邮箱:{input:zhangsanexample.com,expected:zha******.com},地址:{input:浙江省杭州市西湖区文三路100号,expected:浙江省杭州市******}}三、不要过度脱敏。商品名称、价格、订单号这些不是个人敏感信息不要脱敏。脱敏太猛数据就没分析价值了。只脱敏能标识到个人的字段。四、加密密钥轮换。一套密钥用超过6个月要更换换密钥的同时要把已加密文件用旧密钥解密再用新密钥加密。12. 速查表与常见报错正则速查数据类型正则脱敏后示例手机号r1[3-9]\d{9}138****5678身份证r\d{17}[\dXx]330106********1234邮箱r[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}zha******.com银行卡r\d{16,19}622202****1234固话r0\d{2,3}-\d{7,8}0571-****1234邮编r[1-9]\d{5}310***常见报错cryptography.fernet.InvalidToken解密密码错误。原因用了不同密码加密的文件用当前密码解密。记住加密解密必须是同一个密码不存在找回密码。re.error: bad escape正则表达式写错了。检查反斜杠Python字符串里\d不需要转义\\d才算一个反斜杠加字母d。用raw stringr\d{9}避免这类问题。脱敏后的数据仍然可以反推个人信息比如脱敏了手机号和身份证但姓名地址生日性别四要素组合能唯一确定这个人。这种情况要么把姓名也脱敏保留姓、生日去掉日期只保留年份、性别保留。脱敏Excel文件比原文件还大正常的因为脱敏后每个字段长度可能变长比如手机号11位变成11个星号也是11位但身份证18位变18位保持不变。真正的问题是编码——保存时用utf-8不要用utf-8-sig后者会加BOM头导致文件大一点点。PermissionError: [Errno 13] Permission denied文件被其他程序打开比如Excel正在查看无法读写。关闭文件再跑流程。内容标签影刀RPA、数据脱敏、隐私保护、正则表达式、加密存储、个人信息保护法、AES加密作者林焱

相关新闻

影刀RPA新手教程:微信小程序自动化实战——元素定位与数据采集

影刀RPA新手教程:微信小程序自动化实战——元素定位与数据采集

影刀RPA新手教程:微信小程序自动化实战——元素定位与数据采集 微信小程序的数据采集,是影刀RPA最容易被劝退的场景之一。小程序跑在微信容器里,不是标准浏览器,元素定位方法完全不同。这篇就用一个真实项目带你搞定:自…

2026/10/11 0:42:38 阅读更多 →
简历求职意向怎么写?“均可““不限“是简历里最贵的两个词

简历求职意向怎么写?“均可““不限“是简历里最贵的两个词

很多人写求职意向时,会下意识给自己留后路:求职意向:产品 / 运营 / 市场相关岗位,城市不限,薪资面议看起来很灵活。其实等于没写。 HR 读到这种表述,第一反应通常是:这个人还没想清楚自己要做什…

2026/10/11 2:43:24 阅读更多 →
RedSun漏洞的教训:为什么杀毒产品不该“把文件写回去”?Defender修复措施完整清单

RedSun漏洞的教训:为什么杀毒产品不该“把文件写回去”?Defender修复措施完整清单

RedSun漏洞的教训:为什么杀毒产品不该“把文件写回去”?Defender修复措施完整清单 【免费下载链接】RedSun The Red Sun vulnerability repository 项目地址: https://gitcode.com/gh_mirrors/re/RedSun RedSun是一个Red Sun漏洞仓库,…

2026/10/10 19:32:20 阅读更多 →

最新新闻

SharpDevelop 2.1.0:让.NET 2.0旧工程在现代Windows中继续运行的老IDE

SharpDevelop 2.1.0:让.NET 2.0旧工程在现代Windows中继续运行的老IDE

简介:SharpDevelop 2.1.0.2429是一款开放源码的C#集成开发环境,面向正在学习C#语言的初学者以及需要轻量化开发工具的专业程序员,可在Windows平台上完成代码编写、项目管理和程序调试等工作。压缩包内共包含2个文件,整体体积仅4.1…

2026/10/12 16:00:21 阅读更多 →
LVRTE2012补丁包安全安装指南:版本核对与回滚备份要点

LVRTE2012补丁包安全安装指南:版本核对与回滚备份要点

简介:面向LabVIEW 2012应用开发与部署场景的运行时引擎补丁包,供需要部署或维护LabVIEW 2012程序的工程师使用。该压缩包内含完整的运行时组件、更新程序与许可文件,可让目标电脑无需安装完整开发环境即可运行已编译VI程序,解决部…

2026/10/12 16:00:21 阅读更多 →
pstack生产环境实战:死锁定位、性能采样与多线程栈解读指南

pstack生产环境实战:死锁定位、性能采样与多线程栈解读指南

1. 从"能跑"到"敢用":pstack 在生产环境中的定位思考很多人第一次接触 pstack,都是在某个服务卡死的深夜。进程还在,CPU 不高,日志不输出,重启又怕丢现场——这时候老手会甩过来一句"先 psta…

2026/10/12 16:00:20 阅读更多 →
Python问卷数据统计全流程:清洗、口径与交叉分析实战

Python问卷数据统计全流程:清洗、口径与交叉分析实战

简介:面向使用Python开展调查问卷数据统计的开发者,这套学习资料尤其适合有课程设计、毕业设计或市场调研分析需求的读者。内容围绕问卷数据的读取清洗、统计汇总与可视化展示展开,覆盖从原始数据到结论呈现的完整处理链路,配套讲…

2026/10/12 16:00:20 阅读更多 →
人类一分子的责任:从日常小事到可持续行动的实践清单

人类一分子的责任:从日常小事到可持续行动的实践清单

最近我经常在小区群里看到两类消息,一类是抱怨公共区域卫生没人管,一类是号召大家周末做清理志愿服务。抱怨的人很多,报名的人也不少,但我注意到一个有意思的现象:很多人觉得“责任”是个特大号词汇,必须等…

2026/10/12 16:00:20 阅读更多 →
PyCharm配置Git全指南:从路径设置到远程推送避坑

PyCharm配置Git全指南:从路径设置到远程推送避坑

简介:面向使用PyCharm的Python开发者,这份图文教程专门解决IDE内配置Git及日常版本控制操作的问题。内容从Git客户端安装讲起,覆盖PyCharm中Version Control的Git路径配置、克隆远程仓库、比较文件不同版本差异,以及创建与切换分支…

2026/10/12 15:59:19 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →