影刀RPA 数据脱敏与隐私保护:敏感信息处理
影刀RPA 数据脱敏与隐私保护敏感信息处理作者林焱什么情况用你的影刀流程采集了大量用户数据——手机号、身份证号、邮箱、银行卡号——需要导出给第三方分析但直接导出违反隐私法规你想在测试环境中使用真实数据但又不能暴露敏感信息需要把日志中的密码和密钥脱敏后才能记录数据脱敏是数据处理中不可忽视的一环。无论是个人信息保护法PIPL还是企业内部合规要求敏感数据在存储、传输、展示时都需要脱敏处理。本文讲清楚常见敏感数据的脱敏规则、在影刀RPA中怎么实现批量脱敏、脱敏后怎么保持数据可用性。怎么做拼多多店群自动化上架方案一、常见脱敏规则importreimporthashlibclassDataMasker:数据脱敏工具staticmethoddefmask_phone(phone):手机号脱敏138****1234phonestr(phone).strip()iflen(phone)11:returnphone[:3]****phone[7:]returnphonestaticmethoddefmask_id_card(id_card):身份证号脱敏110101********1234id_cardstr(id_card).strip()iflen(id_card)18:returnid_card[:6]********id_card[14:]eliflen(id_card)15:returnid_card[:6]******id_card[12:]returnid_cardstaticmethoddefmask_email(email):邮箱脱敏z***example.comemailstr(email).strip()ifinemail:name,domainemail.split(,1)iflen(name)1:masked_namenameeliflen(name)3:masked_namename[0]**(len(name)-1)else:masked_namename[0]***name[-1]returnf{masked_name}{domain}returnemailstaticmethoddefmask_bank_card(card):银行卡号脱敏6222****1234cardstr(card).replace( ,).strip()iflen(card)12:returncard[:4]****card[-4:]returncardstaticmethoddefmask_name(name):姓名脱敏张*三 / 欧阳**namestr(name).strip()iflen(name)1:returnnameeliflen(name)2:returnname[0]*eliflen(name)3:returnname[0]*name[2]eliflen(name)4:returnname[:2]**else:returnname[0]**(len(name)-2)name[-1]staticmethoddefmask_address(address):地址脱敏保留省市详细地址用*替代addressstr(address).strip()# 保留前6个字符通常包含省市后面脱敏iflen(address)6:returnaddressreturnaddress[:6]**min(len(address)-6,20)staticmethoddefmask_password(password):密码脱敏全部替换为*return**len(str(password))staticmethoddefhash_value(value,algorithmmd5):哈希脱敏不可逆valuestr(value).encode(utf-8)ifalgorithmmd5:returnhashlib.md5(value).hexdigest()elifalgorithmsha256:returnhashlib.sha256(value).hexdigest()else:returnhashlib.md5(value).hexdigest()staticmethoddefmask_custom(value,keep_start0,keep_end0,mask_char*):自定义脱敏保留前N位和后N位中间用*替代valuestr(value).strip()iflen(value)keep_startkeep_end:returnmask_char*len(value)masked_lengthlen(value)-keep_start-keep_endreturnvalue[:keep_start]mask_char*masked_lengthvalue[-keep_end:]ifkeep_end0elsevalue[:keep_start]mask_char*masked_length# 使用示例mDataMasker()print(m.mask_phone(13812345678))# 138****5678print(m.mask_id_card(110101199001011234))# 110101********1234print(m.mask_email(zhangsanexample.com))# z***example.comprint(m.mask_bank_card(6222021234567890123))# 6222****0123print(m.mask_name(张三丰))# 张*丰print(m.mask_name(欧阳修))# 欧** (3字名)print(m.mask_address(北京市朝阳区建国路88号))# 北京市朝阳区*************print(m.mask_password(mypassword123))# ************print(m.hash_value(13812345678))# 哈希值二、Excel批量脱敏importopenpyxlimportosdefmask_excel_file(input_file,output_file,mask_config): 批量脱敏Excel文件 mask_config: {列名: 脱敏类型} 字典 示例: {手机号: phone, 身份证: id_card, 邮箱: email} maskerDataMasker()# 脱敏函数映射mask_functions{phone:masker.mask_phone,id_card:masker.mask_id_card,email:masker.mask_email,bank_card:masker.mask_bank_card,name:masker.mask_name,address:masker.mask_address,password:masker.mask_password,hash:masker.hash_value,}wbopenpyxl.load_workbook(input_file)forsheet_nameinwb.sheetnames:wswb[sheet_name]# 获取表头headers{}forcolinrange(1,ws.max_column1):headerws.cell(row1,columncol).valueifheader:headers[str(header).strip()]col# 找到需要脱敏的列mask_columns{}forcol_name,mask_typeinmask_config.items():ifcol_nameinheaders:mask_columns[headers[col_name]]mask_typeprint(f Sheet {sheet_name}: 列{col_name} →{mask_type}脱敏)# 逐行脱敏forrowinrange(2,ws.max_row1):forcol,mask_typeinmask_columns.items():cellws.cell(rowrow,columncol)ifcell.value:mask_funcmask_functions.get(mask_type)ifmask_func:cell.valuemask_func(str(cell.value))# 保存脱敏后的文件wb.save(output_file)print(f脱敏完成:{input_file}→{output_file})# 使用示例mask_config{手机号:phone,身份证号:id_card,邮箱:email,银行卡号:bank_card,客户姓名:name,家庭住址:address,}mask_excel_file(data/customers.xlsx,data/customers_masked.xlsx,mask_config)三、CSV批量脱敏importcsvimportosdefmask_csv_file(input_file,output_file,mask_config,encodingutf-8):批量脱敏CSV文件maskerDataMasker()mask_functions{phone:masker.mask_phone,id_card:masker.mask_id_card,email:masker.mask_email,bank_card:masker.mask_bank_card,name:masker.mask_name,address:masker.mask_address,password:masker.mask_password,}withopen(input_file,r,encodingencoding,newline)asfin:readercsv.DictReader(fin)# 确定需要脱敏的字段mask_fields{f:tforf,tinmask_config.items()iffinreader.fieldnames}withopen(output_file,w,encodingencoding,newline)asfout:writercsv.DictWriter(fout,fieldnamesreader.fieldnames)writer.writeheader()row_count0forrowinreader:forfield,mask_typeinmask_fields.items():ifrow[field]:mask_funcmask_functions.get(mask_type)ifmask_func:row[field]mask_func(row[field])writer.writerow(row)row_count1print(f脱敏完成:{row_count}行,{input_file}→{output_file})# 使用mask_csv_file(data/users.csv,data/users_masked.csv,{phone:phone,email:email,name:name})四、日志脱敏importreimportloggingclassSensitiveDataFilter(logging.Filter):日志敏感信息过滤器# 敏感数据正则模式PATTERNS{phone:(re.compile(r1[3-9]\d{9}),lambdam:m.group()[:3]****m.group()[7:]),id_card:(re.compile(r\d{17}[\dXx]),lambdam:m.group()[:6]********m.group()[14:]),email:(re.compile(r[\w.][\w.]),lambdam:m.group()[0]***m.group().split()[1]),bank_card:(re.compile(r\d{16,19}),lambdam:m.group()[:4]****m.group()[-4:]),}deffilter(self,record):msgstr(record.getMessage())forname,(pattern,replacer)inself.PATTERNS.items():msgpattern.sub(replacer,msg)record.msgmsgreturnTrue# 使用loggerlogging.getLogger(rpa)logger.setLevel(logging.DEBUG)handlerlogging.StreamHandler()handler.addFilter(SensitiveDataFilter())logger.addHandler(handler)# 日志中的敏感信息会自动脱敏logger.info(f用户手机号13812345678登录成功)# 输出: 用户手机号138****5678登录成功logger.info(f身份证号110101199001011234已验证)# 输出: 身份证号110101********1234已验证五、可逆脱敏加密脱敏importhashlibimportbase64fromcryptography.fernetimportFernetimportjsonclassReversibleMasker:可逆脱敏加密解密def__init__(self,keyNone):ifkeyisNone:keyFernet.generate_key()self.keykey self.cipherFernet(key)defencrypt(self,value):加密脱敏value_bytesstr(value).encode(utf-8)encryptedself.cipher.encrypt(value_bytes)returnencrypted.decode(utf-8)defdecrypt(self,encrypted_value):解密还原encrypted_bytesencrypted_value.encode(utf-8)decryptedself.cipher.decrypt(encrypted_bytes)returndecrypted.decode(utf-8)defencrypt_dict(self,data,fields):加密字典中的指定字段resultdata.copy()forfieldinfields:iffieldinresult:result[field]self.encrypt(result[field])returnresultdefdecrypt_dict(self,data,fields):解密字典中的指定字段resultdata.copy()forfieldinfields:iffieldinresult:try:result[field]self.decrypt(result[field])except:pass# 解密失败保持原值returnresult# 使用maskerReversibleMasker(keybyour-secret-key-here-32-bytes!!!)# 原始数据user_data{name:张三,phone:13812345678,id_card:110101199001011234}# 加密脱敏masked_datamasker.encrypt_dict(user_data,[phone,id_card])print(f脱敏后:{masked_data})# {name: 张三, phone: gAAAAABm..., id_card: gAAAAABm...}# 解密还原original_datamasker.decrypt_dict(masked_data,[phone,id_card])print(f还原后:{original_data})# {name: 张三, phone: 13812345678, id_card: 110101199001011234}有什么坑坑1脱敏不彻底导致信息泄露现象手机号脱敏了但日志里还出现了完整号码。或者Excel中某列漏配了脱敏规则。解决建立脱敏配置清单——列出所有包含敏感信息的字段及其脱敏规则。脱敏后做验证——搜索脱敏后的数据中是否还有未脱敏的敏感信息模式如11位数字、18位身份证号。日志中统一使用敏感数据过滤器。TEMU店群如何管理运营坑2脱敏后数据无法用于开发测试现象手机号脱敏成138****5678后开发测试时无法发送短信验证码。解决对开发测试环境使用假数据替换而非遮盖脱敏。把真实手机号替换为测试号码如13800000000。保留数据格式但替换为假值——保持11位手机号格式但使用假号码。用Faker库生成逼真的假数据。坑3脱敏规则不一致现象同一个手机号在不同报表中脱敏方式不同——有的显示138****5678有的显示138***5678。解决统一脱敏规则封装成工具类如上面的DataMasker。所有流程都调用同一个脱敏工具不各自实现。建立脱敏规则文档明确每种数据类型的脱敏格式。坑4哈希脱敏后的碰撞问题现象用MD5哈希手机号不同手机号可能产生相同的哈希值碰撞导致数据关联错误。解决MD5碰撞概率极低实际中几乎不会出问题。但为了更安全用SHA256代替MD5。哈希时加salt随机盐值防止彩虹表攻击hashlib.sha256((value salt).encode()).hexdigest()。不同字段的salt不同。坑5可逆脱敏的密钥管理现象用加密做可逆脱敏但密钥硬编码在代码中泄露了等于没脱敏。解决密钥不能硬编码。通过环境变量传入key os.environ.get(MASK_KEY)。或者用密钥管理服务KMS。密钥和加密数据分开存储。定期轮换密钥。开发、测试、生产环境使用不同的密钥。如果不需要还原优先使用不可逆脱敏遮盖或哈希。

相关新闻

RobotBrain扩展开发:如何自定义控制模块与插件

RobotBrain扩展开发:如何自定义控制模块与插件

RobotBrain扩展开发:如何自定义控制模块与插件 【免费下载链接】RobotBrain Robot system control library, runtime services. 项目地址: https://gitcode.com/openeuler/RobotBrain 前往项目官网免费下载:https://ar.openeuler.org/ar/ RobotB…

2026/7/17 13:32:23 阅读更多 →
tschema错误处理最佳实践:构建健壮的API验证系统

tschema错误处理最佳实践:构建健壮的API验证系统

tschema错误处理最佳实践:构建健壮的API验证系统 【免费下载链接】tschema A tiny (500b) utility to build JSON schema types. 项目地址: https://gitcode.com/gh_mirrors/ts/tschema 在构建现代Web应用和API时,数据验证是确保系统稳定性的关键…

2026/7/17 13:32:23 阅读更多 →
Umi-OCR插件架构深度解析:打造模块化文字识别生态系统

Umi-OCR插件架构深度解析:打造模块化文字识别生态系统

Umi-OCR插件架构深度解析:打造模块化文字识别生态系统 【免费下载链接】Umi-OCR_plugins Umi-OCR 插件库 项目地址: https://gitcode.com/gh_mirrors/um/Umi-OCR_plugins Umi-OCR插件库通过模块化架构为开源OCR软件提供了强大的扩展能力,让开发者…

2026/7/17 13:30:22 阅读更多 →

最新新闻

【ComfyUI提示词调度黄金公式】:基于Latent空间响应建模的3类调度策略(含TensorFlow级可视化验证)

【ComfyUI提示词调度黄金公式】:基于Latent空间响应建模的3类调度策略(含TensorFlow级可视化验证)

更多请点击: https://intelliparadigm.com 第一章:ComfyUI提示词调度黄金公式的理论基石与实践意义 ComfyUI 提示词调度黄金公式并非经验性技巧的堆砌,而是建立在扩散模型注意力机制、文本嵌入空间几何结构及时间步长语义对齐三重理论基石之…

2026/7/17 14:33:30 阅读更多 →
终极指南:3分钟免费掌握VideoDownloadHelper视频下载插件

终极指南:3分钟免费掌握VideoDownloadHelper视频下载插件

终极指南:3分钟免费掌握VideoDownloadHelper视频下载插件 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 还在为无法保存网页视频…

2026/7/17 14:31:26 阅读更多 →
如何高效实现音频转文字:AsrTools智能语音识别工具完整指南

如何高效实现音频转文字:AsrTools智能语音识别工具完整指南

如何高效实现音频转文字:AsrTools智能语音识别工具完整指南 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accu…

2026/7/17 14:29:21 阅读更多 →
5分钟解决Hackintosh配置难题:OpCore-Simplify智能配置工具实战指南

5分钟解决Hackintosh配置难题:OpCore-Simplify智能配置工具实战指南

5分钟解决Hackintosh配置难题:OpCore-Simplify智能配置工具实战指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾经花费数天时…

2026/7/17 14:27:19 阅读更多 →
打造纯净阅读空间:ReadCat开源小说阅读器完全指南

打造纯净阅读空间:ReadCat开源小说阅读器完全指南

打造纯净阅读空间:ReadCat开源小说阅读器完全指南 【免费下载链接】read-cat 一款免费、开源、简洁、纯净、无广告的小说阅读器 项目地址: https://gitcode.com/gh_mirrors/re/read-cat 厌倦了广告弹窗的骚扰?受够了隐私数据被收集?想…

2026/7/17 14:19:08 阅读更多 →
B站评论区成分检测:从人工筛选到智能识别的效率革命

B站评论区成分检测:从人工筛选到智能识别的效率革命

B站评论区成分检测:从人工筛选到智能识别的效率革命 【免费下载链接】bilibili-comment-checker B站评论区自动标注成分,支持动态和关注识别以及手动输入 UID 识别 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-comment-checker 当B站…

2026/7/17 14:15:04 阅读更多 →

日新闻

2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制

2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制

2026全国外贸独立站搭建公司推荐排行 外贸工厂、工贸企业建设官网,核心需求与普通展示型网站并不相同。除了页面整洁、多语言适配和海外访问体验,企业还要重点考虑数据能否导出、站点能否迁移、源码是否可控、后续费用是否透明,以及更换服务…

2026/7/17 0:02:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析

HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析

3D 翻转动画实现——ArkTS 动画系统全解析引言 在移动应用中,卡片翻转动画是最受欢迎的交互动效之一,它能给用户带来直观的"物理世界"操作感。在我们的英语学习 App 的单词学习页面(CourseHomePage.ets)中,就…

2026/7/17 0:02:10 阅读更多 →
2026键盘推荐|IQUNIX EV63多场景适配,不允许有人不知道!

2026键盘推荐|IQUNIX EV63多场景适配,不允许有人不知道!

现在很多用户都需要一款能适配多场景的键盘,既能满足交流码字的需求,又能应对居家电竞的性能需求,最好还得有点小颜值。而大多键盘都只能兼顾其中一两个场景。这次我实测了IQUNIX EV63三款配色(银武士、黑武士、紫罗兰&#xff09…

2026/7/17 0:04:10 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/17 3:22:28 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/17 3:01:28 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/16 23:40:37 阅读更多 →

月新闻