【PHP函数封装】分分钟帮你实现数据脱敏处理, 支持手机号码、邮箱、身份证号 中文字符串!

🚀 个人主页 极客小俊
✍🏻 作者简介:web开发者、设计师、技术分享博主
🐋 希望大家多多支持一下, 我们一起进步!😄
🏅 如果文章对你有帮助的话,欢迎评论 💬点赞👍🏻 收藏 📂加关注

什么是数据脱敏?

很多人做过开发,但不一定知道这个词汇数据脱敏

那么数据脱敏其实就是把重要的一些数据信息进行隐藏,

在我们开发指定的脱敏规则之下对敏感数据进行处理、编辑、修改的一种方式,防止这些重要数据直接暴露在不安全的环境下, 这就叫数据脱敏

总的来说数据脱敏的意思就是让敏感的数据通过一种脱胎换骨的手法把它隐藏起来,简单的说就是把敏感数据保护起来!

开发中哪些数据和应用场景需要做数据脱敏

我们平常开发中其实有很多简单的业务也会涉及到数据脱敏这些信息就是比较敏感的信息,必然需要处理才行!

我们来看看以下的这些应用场景!

例如:用户个人信息 我们在处理用户个人信息时,例如姓名、地址、电话号码等,为了保护用户的隐私,需要对这些数据进行脱敏处理,如将电话号码替换为部分号码 或者把手机号码的中间重要的四位数字进行隐藏。

一些金融信息 例如银行账号、信用卡号等,为了防止数据泄露欺诈行为,需要对这些数据进行脱敏处理,如将账号部分数字替换为*对吧!

另外就是一些医疗信息,例如病历、诊断结果、药品处方等,为了保护患者的隐私和安全,需要对这些数据进行脱敏处理,比如:患者姓名、诊断结果等敏感信息进行脱敏。

企业敏感数据也可能存在一些敏感数据,比如: 公司财务报告、产品营销策略文档等,为了防止数据泄露给未授权人员,需要对这些数据进行脱敏处理。

还有数据传输也存在这个情况, 例如在数据库或日志文件中存储用户密码、在互联网传输敏感信息时,为了保护数据的安全性,需要对这些数据进行脱敏处理,如将密码哈希存储、对传输的数据进行加密等。

举个简单的栗子

大家都知道自己账户的银行卡吧, 加入你要查看银行卡的时候,只会显示银行卡的最后4位

如图

这就是数据脱敏后的效果

假如你要查看银行卡的全部卡号,那么你就要通过本人来进行人脸识别,手机短信验证,通过以后才能显示全部银行卡来进行查看!

数据脱敏的简单过程

简单的说也就是把数据中敏感的部分变成密文的手法!

简单的数据脱敏流程大致如下:

首先你要确定哪些数据属于敏感数据, 然后根据实际情况选择合适的脱敏方式,比如: 加密、替换、删除等都可以,用这些方式来对对敏感数据进行脱敏处理 从而确保数据的安全性可用性

如图

然后再根据脱敏数据的规范制定一系列访问权限的逻辑规则

举个栗子

比如用户身份验证或者登录之后,确定用户在某个权限的情况下,对于敏感数据那么就按照用户权限来进行划分访问和查看!

如图

PHP实现数据脱敏的简单方法

假设有一个用户表,其中包含用户的姓名、电话号码电子邮件地址

数据如下

// 用户表数据
$users = [['name' => '张三', 'phone' => '13812345678', 'email' => 'zhangsan@example.com'],['name' => '李四', 'phone' => '13987654321', 'email' => 'lisi@example.com'],
];

为了保护用户的隐私,需要对电话号码电子邮件地址进行脱敏处理!

那么我们可以针对这个业务逻辑封装一个简单函数

代码如下

/*** @param $data* @return mixed*/
function desensitizeData($data){$sensitiveData = ['phone', 'email'];foreach ($sensitiveData as $key) {if (isset($data[$key])) {$data[$key] = str_repeat('*', strlen($data[$key]));}}return $data;
}// 对用户表进行循环脱敏处理
foreach ($users as &$user) {$user = desensitizeData($user);
}
unset($user);// 输出脱敏后的用户表数据
print_r($users);

在这个案例当中我们定义了一个desensitizeData函数,它接受一个数组作为参数来检查数组中是否存在需要脱敏的敏感数据字段,并将其替换为相同长度的*字符!

然后,我们遍历用户表中的每个用户,对其中的敏感数据进行脱敏处理,最后输出脱敏后的用户表数据。

这样,用户的电话号码电子邮件地址就被成功地脱敏隐藏了。

结果如下

当然你也可以根据具体需求来修改代码逻辑从而脱敏数据

比如:我们现在需要把保留手机号码前三位后四位,那么我们的代码其实只需要加一个简单的函数就可以了

代码如下

/*** @param $phone* @return string*/
function desensitizePhone($phone) {return substr($phone, 0, 3) . '****' . substr($phone, 7);
}/*** @param $data* @return mixed*/
function desensitizeData($data){$sensitiveData = ['phone', 'email'];foreach ($sensitiveData as $key) {if (isset($data[$key]) && $key=='phone') {$data[$key]=desensitizePhone($data[$key]);}else{$data[$key] = str_repeat('*', strlen($data[$key]));}}return $data;
}// 对用户表进行循环脱敏处理
foreach ($users as &$user) {$user = desensitizeData($user);
}
unset($user);// 输出脱敏后的用户表数据
print_r($users);

效果如下

为了更好的实现数据脱敏的需求,我们可以优化一下我们的封装函数

让这个函数可以兼容 手机号、银行卡、身份证、中文字符串的脱敏操作,并且可以自由指定脱敏字符!

代码如下

/*** 描述: 手机号,银行卡号,身份证等 中文字符串脱敏处理函数* @param $string 需要脱敏值* @param int $start 开始* @param int $length 结束 隐藏敏感数据的个数* @param string $re 脱敏替代符号* @return bool|string* 示例:* _DataDesensitization('数据字符串', 开始位置, 脱敏个数);**/function _DataDesensitization($string, $start = 0, $length = 0, $mark = '*'){//如果传递的字符串数据为空if (empty($string)) {return false;}//定义个空数组$container = array();   //获取字符串的长度$mb_strlen = mb_strlen($string);//循环, 把传递进来的字符串变为数组while ($mb_strlen) {$container[] = mb_substr($string, 0, 1, 'utf8'); $string = mb_substr($string, 1, $mb_strlen, 'utf8'); $mb_strlen = mb_strlen($string); }//统计一下,转载数组中的元素个数$strlen = count($container);$begin = $start >= 0 ? $start : ($strlen - abs($start));$end = $last = $strlen - 1;  //5if ($length > 0) {$end = $begin + $length - 1;} elseif ($length < 0) {$end = $end - abs($length); // 5 - 1 = 4}//用字符串,隐藏对应的数据for ($i = $begin; $i <= $end; $i++) {$container[$i] = $mark;}//把不符合逻辑的条件过滤掉, 这几个条件也就是限定我们传递的$start和$length参数是否合法if ($begin >= $end || $begin >= $last || $end > $last) {return false;}//合并数组,返回字符串结果return implode('', $container);}

然后我们来试试看数据脱敏

代码如下

// 用户表数据
$users = [['name' => '张晓明', 'phone' => '13812345678', 'email' => 'zhangsan@example.com'],['name' => '李大嘴', 'phone' => '13987654321', 'email' => 'lisi@example.com'],
];// 对用户表进行循环脱敏处理
foreach ($users as &$user) {//$user = dataDesensitization($user);foreach ($user as $key=>$value){if($key=='name'){$user[$key]=_DataDesensitization($value,1,2,'*');}else if($key=='phone'){$user[$key]=_DataDesensitization($value,3,4,'*');}}
}
unset($user);// 输出脱敏后的用户表数据
print_r($users);

结果如下

小结

数据脱敏是项目中很常见的一种数据保护方式,我们以后也会经常用到这个小技巧!

关于数据脱敏还有很多,不仅仅是这些,有时间在给大家深入分享数据脱敏的更多知识!

"👍点赞" "✍️评论" "收藏❤️"

大家的支持就是我坚持下去的动力!

如果以上内容有任何错误或者不准确的地方,🤗🤗🤗欢迎在下面 👇👇👇 留个言指出、或者你有更好的想法,
欢迎一起交流学习❤️❤️💛💛💚💚

更多 好玩 好用 好看的干货教程可以 点击下方关注❤️ 微信公众号❤️
说不定有意料之外的收获哦..🤗嘿嘿嘿、嘻嘻嘻🤗!
🌽🍓🍎🍍🍉🍇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/137582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MIPSsim模拟器 使用说明

&#xff08;一&#xff09; 启动模拟器 双击MIPSsim.exe&#xff0c;即可启动该模拟器。模拟器启动时&#xff0c;自动将自己初始化为默认状态。所设置的默认值为&#xff1a; u所有通用寄存器和浮点寄存器为全0&#xff1b; u内存清零&#xff1b; u流水寄存器为全0&#xff…

【ElasticSearch系列-06】Es集群架构的搭建以及集群的核心概念

ElasticSearch系列整体栏目 内容链接地址【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631【三】ElasticSearch的高级查询Quer…

P1547 [USACO05MAR] Out of Hay S 题解

文章目录 题目描述输入格式输出格式样例样例输入样例输出 完整代码 题目描述 Bessie 计划调查 N N N&#xff08; 2 ≤ N ≤ 2 000 2 \leq N \leq 2\,000 2≤N≤2000&#xff09;个农场的干草情况&#xff0c;它从 1 1 1 号农场出发。农场之间总共有 M M M&#xff08; 1 ≤…

深入理解ClickHouse跳数索引

一、跳数索引​ 影响ClickHouse查询性能的因素很多。在大多数场景中&#xff0c;关键因素是ClickHouse在计算查询WHERE子句条件时是否可以使用主键。因此&#xff0c;选择适用于最常见查询模式的主键对于表的设计至关重要。 然而&#xff0c;无论如何仔细地调优主键&#xff…

14:00面试,14:06就出来了,问的问题有点变态。。。。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

跨境电商:自养买家账号测评,你需要了解的细节

在跨境电商的浪潮中&#xff0c;自养买家账号测评已经成为了一种趋势。近期&#xff0c;不少跨境卖家咨询自养买家账号测评的相关问题&#xff0c;看来有必要再讲解一下卖家测评的一些细节。今天将着重介绍自养号测评的相关内容。 首先&#xff0c;什么叫做自养号测评呢&#x…

pytest + yaml 框架 -58.运行报告总结summary.json

前言 用例运行结束后&#xff0c;在本地生成summary.json 文件&#xff0c;总结运行结果。 v1.5.1版本更新内容&#xff1a; 1.解决参数化&#xff0c;中文在控制台输出问题 2.保存用例结果summary.json 保存用例结果summary.json 命令行执行用例 pytest运行结束&#xff0…

【Unity插件】分享几个完全免费的2D角色动画生成器(推荐收藏)

文章目录 前言一、lpc-character-generator二、Universal-LPC-Spritesheet-Character-Generator三、UP主开发的2D人物换装系统四、Character Editor: Megapack完结 前言 你可能游戏开发能力很强&#xff0c;但是正愁于2D角色动画&#xff0c;那么这篇文章就是为你而准备的&…

RISC Zero的Bonsai证明服务

1. 引言 Bonsai为通用ZKP网络&#xff0c;其支持任意链、任意协议、以及任意应用&#xff0c;利用ZKP来扩容、隐私和互操作。Bonsai的目标是为每条链都提供无限计算的能力。 借助Bonsai&#xff0c;可仅需数天的开发&#xff0c;即可实现对以太坊、L1链、Cosmos app链、L2 ro…

【FastCAE源码阅读7】视图方向切换按钮实现原理

在FastCAE工具栏上有视图切换按钮&#xff0c;如下图所示&#xff1a; 本文介绍如何实现。 FastCAE集成了Python解析器&#xff0c;当单击按钮时&#xff0c;中间用Python执行的&#xff0c;最后调用MainWindow.dll库接口实现的。 具体的Python代码在Python模块的py文件夹下的…

Postman汉化教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Postman汉化教程 前言 前言 Postman是一款支持http协议的接口调试与测试工具&#xff0c;其主要特点就是功能强大&#xff0c;使用简单且易用性好 。无论是开发人员进行接口…

uniapp小程序才到第五层就报错navigateto:fail webview count limit exceed

错误截图 原因 小程序官方描述是说可以跳转10层&#xff0c;但是使用uniapp开发的程序在小程序中才运行到第五层就报错了&#xff0c;原因是因为没有设置appId。如果设置了就正常了。

文件缓存的读写

文件系统的读写&#xff0c;其实就是调用系统函数 read 和 write。下面的代码就是 read 和 write 的系统调用&#xff0c;在内核里面的定义。 SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count) {struct fd f fdget_pos(fd); ......loff_t pos f…

数据分析是什么?

第一章- 数据分析是什么 数据分析是指 根据分析目的&#xff0c;用适当的分析方法及工具&#xff0c;对数据进行分析&#xff0c;提取有价值的信息&#xff0c;形成有效结论的过程。 数据分析的作用 通过观察数据&#xff0c;知道当前发生什么&#xff1f;通过具体的数据拆解…

Webpack 中 loader 的作用是什么?常用 loader 有哪些?

说说webpack中常见的Loader&#xff1f;解决了什么问题&#xff1f;- 题目详情 - 前端面试题宝典 1、loader 是什么 loader是 webpack 最重要的部分之一。 通过使用不同的 loader&#xff0c;我们能够调用外部的脚本或者工具&#xff0c;实现对不同格式文件的处理。 loader…

嵌入式养成计划-48----QT--信息管理系统:百川仓储管理

一百二十二、信息管理系统&#xff1a;百川仓储管理 122.1 UI界面 122.2 思路 客户端&#xff1a; 用户权限有两种类型&#xff0c;一种是用户权限&#xff0c;一种是管理员权限&#xff0c;登录时服务器端会根据数据库查询到的此用户名的权限返回不同的结果&#xff0c;客户…

Semantic-Guided Zero-Shot Learning for Low-Light ImageVideo Enhancement

论文阅读之无监督低光照图像增强 Semantic-Guided Zero-Shot Learning for Low-Light Image/Video Enhancement 代码&#xff1a; https://github.com/ShenZheng2000/SemantiGuided-Low-Light-Image-Enhancement 在低光条件下增加亮度的一个可行方法是使用更高的ISO或更长时间…

仿mudou库one thread one loop式并发服务器

目录 1.实现目标 2.HTTP服务器 实现高性能服务器-Reactor模型 模块划分 SERVER模块&#xff1a; HTTP协议模块&#xff1a; 3.项目中的子功能 秒级定时任务实现 时间轮实现 正则库的简单使用 通⽤类型any类型的实现 4.SERVER服务器实现 日志宏的封装 缓冲区Buffer…

简单漂亮的登录页面

效果图 说明 开发环境&#xff1a;vue3&#xff0c;sass 代码 <template><div class"container"><div class"card-container"><div class"card-left"><span><h1>Dashboard</h1><p>Lorem ip…

HTTP 协议详解-上(Fiddler 抓包演示)

文章目录 HTTP 协议HTTP 协议的工作过程HTTP 请求 (Request)认识URL关于 URL encode认识 "方法" (method)GET 方法POST 方法其他方法请求 "报头" (header)请求 "正文" (body) HTTP 响应详解状态码响应 "报头" (header) HTTP 协议 HTT…