PHP函數(shù)封裝分分鐘幫你實現(xiàn)數(shù)據(jù)脫敏處理, 支持手機(jī)、郵箱焙矛、身份證號 中文字符串!

?? 個人主頁 極客小俊
??? 作者簡介:web開發(fā)者葫盼、設(shè)計師、技術(shù)分享博主
?? 希望大家多多支持一下, 我們一起進(jìn)步村斟!??
?? 如果文章對你有幫助的話贫导,歡迎評論 ??點贊???? 收藏 ??加關(guān)注

什么是數(shù)據(jù)脫敏?

很多人做過開發(fā),但不一定知道這個詞匯數(shù)據(jù)脫敏

那么數(shù)據(jù)脫敏其實就是把重要的一些數(shù)據(jù)信息進(jìn)行隱藏蟆盹,

在我們開發(fā)指定的脫敏規(guī)則之下對敏感數(shù)據(jù)進(jìn)行處理孩灯、編輯、修改的一種方式,防止這些重要數(shù)據(jù)直接暴露在不安全的環(huán)境下, 這就叫數(shù)據(jù)脫敏

總的來說數(shù)據(jù)脫敏的意思就是讓敏感的數(shù)據(jù)通過一種脫胎換骨的手法把它隱藏起來,簡單的說就是把敏感數(shù)據(jù)保護(hù)起來!

開發(fā)中哪些數(shù)據(jù)和應(yīng)用場景需要做數(shù)據(jù)脫敏

我們平常開發(fā)中其實有很多簡單的業(yè)務(wù)也會涉及到數(shù)據(jù)脫敏這些信息就是比較敏感的信息逾滥,必然需要處理才行!

我們來看看以下的這些應(yīng)用場景!

例如:用戶個人信息 我們在處理用戶個人信息時峰档,例如姓名、地址、電話號碼等讥巡,為了保護(hù)用戶的隱私掀亩,需要對這些數(shù)據(jù)進(jìn)行脫敏處理,如將電話號碼替換為部分號碼 或者把手機(jī)號碼的中間重要的四位數(shù)字進(jìn)行隱藏欢顷。

一些金融信息 例如銀行賬號槽棍、信用卡號等,為了防止數(shù)據(jù)泄露欺詐行為抬驴,需要對這些數(shù)據(jù)進(jìn)行脫敏處理炼七,如將賬號部分?jǐn)?shù)字替換為*對吧!

另外就是一些醫(yī)療信息,例如病歷布持、診斷結(jié)果豌拙、藥品處方等,為了保護(hù)患者的隱私和安全鳖链,需要對這些數(shù)據(jù)進(jìn)行脫敏處理姆蘸,比如:患者姓名墩莫、診斷結(jié)果等敏感信息進(jìn)行脫敏芙委。

企業(yè)敏感數(shù)據(jù)也可能存在一些敏感數(shù)據(jù),比如: 公司財務(wù)報告狂秦、產(chǎn)品營銷策略文檔等灌侣,為了防止數(shù)據(jù)泄露給未授權(quán)人員,需要對這些數(shù)據(jù)進(jìn)行脫敏處理裂问。

還有數(shù)據(jù)傳輸也存在這個情況, 例如在數(shù)據(jù)庫或日志文件中存儲用戶密碼侧啼、在互聯(lián)網(wǎng)傳輸敏感信息時,為了保護(hù)數(shù)據(jù)的安全性堪簿,需要對這些數(shù)據(jù)進(jìn)行脫敏處理痊乾,如將密碼哈希存儲、對傳輸?shù)臄?shù)據(jù)進(jìn)行加密等椭更。

舉個簡單的栗子

大家都知道自己賬戶的銀行卡吧哪审, 加入你要查看銀行卡的時候,只會顯示銀行卡的最后4位

如圖

這就是數(shù)據(jù)脫敏后的效果

假如你要查看銀行卡的全部卡號虑瀑,那么你就要通過本人來進(jìn)行人臉識別湿滓,手機(jī)短信驗證,通過以后才能顯示全部銀行卡來進(jìn)行查看!

數(shù)據(jù)脫敏的簡單過程

簡單的說也就是把數(shù)據(jù)中敏感的部分變成密文的手法!

簡單的數(shù)據(jù)脫敏流程大致如下:

首先你要確定哪些數(shù)據(jù)屬于敏感數(shù)據(jù), 然后根據(jù)實際情況選擇合適的脫敏方式,比如: 加密舌狗、替換叽奥、刪除等都可以,用這些方式來對對敏感數(shù)據(jù)進(jìn)行脫敏處理 從而確保數(shù)據(jù)的安全性可用性

如圖

然后再根據(jù)脫敏數(shù)據(jù)的規(guī)范制定一系列訪問權(quán)限的邏輯規(guī)則

舉個栗子

比如用戶身份驗證或者登錄之后,確定用戶在某個權(quán)限的情況下痛侍,對于敏感數(shù)據(jù)那么就按照用戶權(quán)限來進(jìn)行劃分訪問和查看!

如圖

PHP實現(xiàn)數(shù)據(jù)脫敏的簡單方法

假設(shè)有一個用戶表朝氓,其中包含用戶的姓名、電話號碼電子郵件地址

數(shù)據(jù)如下

// 用戶表數(shù)據(jù)
$users = [
    ['name' => '張三', 'phone' => '13812345678', 'email' => 'zhangsan@example.com'],
    ['name' => '李四', 'phone' => '13987654321', 'email' => 'lisi@example.com'],
];

為了保護(hù)用戶的隱私,需要對電話號碼電子郵件地址進(jìn)行脫敏處理!

那么我們可以針對這個業(yè)務(wù)邏輯封裝一個簡單函數(shù)

代碼如下

/**
 * @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;
}

// 對用戶表進(jìn)行循環(huán)脫敏處理
foreach ($users as &$user) {
    $user = desensitizeData($user);
}
unset($user);

// 輸出脫敏后的用戶表數(shù)據(jù)
print_r($users);

在這個案例當(dāng)中我們定義了一個desensitizeData函數(shù)赵哲,它接受一個數(shù)組作為參數(shù)來檢查數(shù)組中是否存在需要脫敏的敏感數(shù)據(jù)字段,并將其替換為相同長度的*字符!

然后嘹狞,我們遍歷用戶表中的每個用戶,對其中的敏感數(shù)據(jù)進(jìn)行脫敏處理誓竿,最后輸出脫敏后的用戶表數(shù)據(jù)磅网。

這樣,用戶的電話號碼電子郵件地址就被成功地脫敏隱藏了筷屡。

結(jié)果如下

當(dāng)然你也可以根據(jù)具體需求來修改代碼邏輯從而脫敏數(shù)據(jù)

比如:我們現(xiàn)在需要把保留手機(jī)號碼前三位后四位涧偷,那么我們的代碼其實只需要加一個簡單的函數(shù)就可以了

代碼如下

/**
 * @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;
}

// 對用戶表進(jìn)行循環(huán)脫敏處理
foreach ($users as &$user) {
    $user = desensitizeData($user);
}
unset($user);

// 輸出脫敏后的用戶表數(shù)據(jù)
print_r($users);

效果如下

為了更好的實現(xiàn)數(shù)據(jù)脫敏的需求,我們可以優(yōu)化一下我們的封裝函數(shù)

讓這個函數(shù)可以兼容 手機(jī)號毙死、銀行卡燎潮、身份證、中文字符串的脫敏操作,并且可以自由指定脫敏字符!

代碼如下

/**
 * 描述: 手機(jī)號扼倘,銀行卡號确封,身份證等 中文字符串脫敏處理函數(shù)
 * @param $string 需要脫敏值
 * @param int $start 開始
 * @param int $length 結(jié)束 隱藏敏感數(shù)據(jù)的個數(shù)
 * @param string $re 脫敏替代符號
 * @return bool|string
 * 示例:
 * _DataDesensitization('數(shù)據(jù)字符串', 開始位置, 脫敏個數(shù));
 *
 */


function _DataDesensitization($string, $start = 0, $length = 0, $mark = '*'){
    //如果傳遞的字符串?dāng)?shù)據(jù)為空
    if (empty($string)) {
        return false;
    }

    //定義個空數(shù)組
    $container = array();   

    //獲取字符串的長度
    $mb_strlen = mb_strlen($string);

    //循環(huán), 把傳遞進(jìn)來的字符串變?yōu)閿?shù)組
    while ($mb_strlen) {
        $container[] = mb_substr($string, 0, 1, 'utf8'); //每次循環(huán)把字符串最前面的第一個放入數(shù)組
        $string = mb_substr($string, 1, $mb_strlen, 'utf8'); //每次循環(huán)重新賦值字符串本身
        $mb_strlen = mb_strlen($string); //每一次循環(huán) 重新計算字符串的長度,用于循環(huán)條件的遞減
    }

    //統(tǒng)計一下,轉(zhuǎn)載數(shù)組中的元素個數(shù)
    $strlen = count($container);
    //求開始下標(biāo) 例如: 6 - 3  =  3 求出從數(shù)組的哪一位開始進(jìn)行處理
    $begin = $start >= 0 ? $start : ($strlen - abs($start));
    //結(jié)束值 也就是數(shù)組中的最后一個值對應(yīng)的下標(biāo)
    $end = $last = $strlen - 1;  //5

    //$length 也就是要處理敏感數(shù)據(jù)的個數(shù)
    if ($length > 0) {
        $end = $begin + $length - 1;
    } elseif ($length < 0) {
        $end = $end - abs($length); // 5 - 1 = 4
    }

    //用字符串,隱藏對應(yīng)的數(shù)據(jù)
    for ($i = $begin; $i <= $end; $i++) {
        $container[$i] = $mark;
    }

    //把不符合邏輯的條件過濾掉, 這幾個條件也就是限定我們傳遞的$start和$length參數(shù)是否合法
    // 1.開始下標(biāo)大于等于結(jié)尾下標(biāo)
    // 2.開始下標(biāo)大于等于數(shù)組中的最后一個元素所對應(yīng)的下標(biāo)值
    // 3.結(jié)尾值大于了數(shù)組中的最后一個元素所對應(yīng)的下標(biāo)值
    if ($begin >= $end || $begin >= $last || $end > $last) {
        //        echo '$begin='.$begin."\n";
        //        echo '$end='.$end."\n";
        //        echo '$last='.$last."\n";
        return false;
    }

    //合并數(shù)組再菊,返回字符串結(jié)果
    return implode('', $container);

}

然后我們來試試看數(shù)據(jù)脫敏

代碼如下

// 用戶表數(shù)據(jù)
$users = [
    ['name' => '張曉明', 'phone' => '13812345678', 'email' => 'zhangsan@example.com'],
    ['name' => '李大嘴', 'phone' => '13987654321', 'email' => 'lisi@example.com'],
];


// 對用戶表進(jìn)行循環(huán)脫敏處理
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);

// 輸出脫敏后的用戶表數(shù)據(jù)
print_r($users);

結(jié)果如下

小結(jié)

數(shù)據(jù)脫敏是項目中很常見的一種數(shù)據(jù)保護(hù)方式爪喘,我們以后也會經(jīng)常用到這個小技巧!

關(guān)于數(shù)據(jù)脫敏還有很多,不僅僅是這些纠拔,有時間在給大家深入分享數(shù)據(jù)脫敏的更多知識!

如果我的博客對你有幫助秉剑、如果你喜歡我的博客內(nèi)容,請 “??點贊” “??評論” “??收藏” 一鍵三連哦稠诲!

如果以上內(nèi)容有任何錯誤或者不準(zhǔn)確的地方侦鹏,????歡迎在下面 ?? 留個言指出、或者你有更好的想法臀叙,歡迎一起交流學(xué)習(xí)??????????

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末略水,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子劝萤,更是在濱河造成了極大的恐慌渊涝,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稳其,死亡現(xiàn)場離奇詭異驶赏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)既鞠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門煤傍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嘱蛋,你說我怎么就攤上這事蚯姆∥逍” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵龄恋,是天一觀的道長疙驾。 經(jīng)常有香客問我,道長郭毕,這世上最難降的妖魔是什么它碎? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮显押,結(jié)果婚禮上扳肛,老公的妹妹穿的比我還像新娘。我一直安慰自己乘碑,他們只是感情好挖息,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著兽肤,像睡著了一般套腹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上资铡,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天电禀,我揣著相機(jī)與錄音,去河邊找鬼害驹。 笑死鞭呕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宛官。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼瓦糕,長吁一口氣:“原來是場噩夢啊……” “哼底洗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起咕娄,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤亥揖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后圣勒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體费变,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年圣贸,在試婚紗的時候發(fā)現(xiàn)自己被綠了挚歧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡吁峻,死狀恐怖滑负,靈堂內(nèi)的尸體忽然破棺而出在张,到底是詐尸還是另有隱情,我是刑警寧澤矮慕,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布帮匾,位于F島的核電站,受9級特大地震影響痴鳄,放射性物質(zhì)發(fā)生泄漏瘟斜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一痪寻、第九天 我趴在偏房一處隱蔽的房頂上張望哼转。 院中可真熱鬧,春花似錦槽华、人聲如沸壹蔓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽佣蓉。三九已至,卻和暖如春亲雪,著一層夾襖步出監(jiān)牢的瞬間勇凭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工义辕, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留虾标,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓灌砖,卻偏偏與公主長得像璧函,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子基显,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 大數(shù)據(jù)平臺通過將所有數(shù)據(jù)整合起來蘸吓,充分分析與挖掘數(shù)據(jù)的內(nèi)在價值,為業(yè)務(wù)部門提供數(shù)據(jù)平臺撩幽,數(shù)據(jù)產(chǎn)品與數(shù)據(jù)服務(wù)库继。大數(shù)據(jù)...
    大佛愛讀書閱讀 17,852評論 2 12
  • 一、定義 數(shù)據(jù)脫敏是指對某些敏感信息通過脫敏規(guī)則進(jìn)行數(shù)據(jù)的變形窜醉,實現(xiàn)敏感隱私數(shù)據(jù)的可靠保護(hù)宪萄。在涉及客戶安全數(shù)據(jù)或者...
    Separes閱讀 2,580評論 0 0
  • 背景與目標(biāo) 在數(shù)據(jù)倉庫建設(shè)過程中,數(shù)據(jù)安全扮演著重要角色榨惰,因為隱私或敏感數(shù)據(jù)的泄露拜英,會對數(shù)據(jù)主體(客戶,員工和公司...
    九尾喵的薛定諤閱讀 6,776評論 0 2
  • MOBILE.replace(/(\d{3})\d*(\d{4})/,'$1****$2') //手機(jī)號脫敏操作 ...
    韓girl閱讀 1,597評論 0 1
  • 拼多多有很多的活動都可以領(lǐng)現(xiàn)金排监,在那之前狰右,記得先實名認(rèn)證一下,綁定好自己的微信賬號舆床。不然是沒辦法提現(xiàn)的棋蚌。那拼多多返...
    高省APP珊珊閱讀 2,488評論 0 0