小白談數據脫敏

姚麗冰 學號:16050120089

轉載:http://www.54tianzhisheng.cn/2017/10/28/Data-Desensitization/

【嵌牛導讀】:在涉及客戶安全數據或者一些商業性敏感數據的情況下,在不違反系統規則條件下,對真實數據進行改造并提供測試使用,如身份證號、手機號、卡號、客戶姓名、客戶地址、等個人敏感信息都需要通過脫敏規則進行數據的變形,實現敏感隱私數據的可靠保護。這樣就可以在開發、測試和其他非生產環境以及外包環境中可以安全的使用脫敏后的真實數據集。

【嵌牛鼻子】:脫敏規則,脫敏代碼

【嵌牛提問】:脫敏規則有哪些,如何實現脫敏

【嵌牛正文】:

生活中的常見例子

1、火車票:

2、淘寶網頁上的收獲地址信息:

敏感數據梳理

在進行數據脫敏之前我們應該要確定公司的哪些數據(哪些表、哪些字段)要作為脫敏的目標,下面從用戶、公司、賣家方面分析:

1、用戶:名字、手機號碼、身份證號碼、固定電話、收貨地址、電子郵箱、銀行卡號、密碼等

2、賣家:名字、手機號碼、身份證號碼、固定電話等

3、公司:交易金額、優惠券碼、充值碼等

確定脫敏規則

確定好了公司的哪些數據要作為脫敏目標后,我們就需要制定脫敏的規則(具體的實施方法)。

常見方法:

1、替換:如統一將女性用戶名替換為F,這種方法更像“障眼法”,對內部人員可以完全保持信息完整性,但易破解。

2、重排:序號12345 重排為 54321,按照一定的順序進行打亂,很像“替換”, 可以在需要時方便還原信息,但同樣易破解。

3、加密:編號 12345 加密為 23456,安全程度取決于采用哪種加密算法,一般根據實際情況而定。

4、截斷:13811001111 截斷為 138,舍棄必要信息來保證數據的模糊性,是比較常用的脫敏方法,但往往對生產不夠友好。(丟失字段的長度)

5、掩碼: 123456 -> 1xxxx6,保留了部分信息,并且保證了信息的長度不變性,對信息持有者更易辨別, 如火車票上得身份信息。(常用方法)

6、日期偏移取整:20130520 12:30:45 -> 20130520 12:00:00,舍棄精度來保證原始數據的安全性,一般此種方法可以保護數據的時間分布密度。

目前我的脫敏規則想法是:

1、【中文姓名】只顯示第一個漢字,其他隱藏為2個星號,比如:李**

2、【身份證號】顯示最后四位,其他隱藏。共計18位或者15位,比如:*************1234

3、【固定電話】 顯示后四位,其他隱藏,比如:*******3241

4、【手機號碼】前三位,后四位,其他隱藏,比如:135****6810

5、【地址】只顯示到地區,不顯示詳細地址,比如:上海徐匯區漕河涇開發區***

6、【電子郵箱】 郵箱前綴僅顯示第一個字母,前綴其他隱藏,用星號代替,@及后面的地址顯示,比如:d**@126.com

7、【銀行卡號】前六位,后四位,其他用星號隱藏每位1個星號,比如:6222600**********1234

8、【密碼】密碼的全部字符都用 * 代替,比如: ************

根據以上規則進行數據脫敏!

具體思路目前是這樣的:

從原數據源查詢到的生產數據 ——> 數據脫敏 ——> 更新到目標數據源。

原數據源、目標數據源、需要脫敏的表、字段等都放在配置文件中,做到可擴展性!

脫敏工具代碼

根據以上規則已經寫好了一份簡單的脫敏規則工具類。

/**

* 數據脫敏工具類

* Created by zhisheng_tian on 2017/10/25.

*/

public class DesensitizedUtils {

? ? /**

? ? * 【中文姓名】只顯示第一個漢字,其他隱藏為2個星號,比如:李**

? ? *

? ? * @param fullName

? ? * @return

? ? */

? ? public static String chineseName(String fullName) {

? ? ? ? if (StringUtils.isBlank(fullName)) {

? ? ? ? ? ? return "";

? ? ? ? }

? ? ? ? String name = StringUtils.left(fullName, 1);

? ? ? ? return StringUtils.rightPad(name, StringUtils.length(fullName), "*");

? ? }

? ? /**

? ? * 【身份證號】顯示最后四位,其他隱藏。共計18位或者15位,比如:*************1234

? ? *

? ? * @param id

? ? * @return

? ? */

? ? public static String idCardNum(String id) {

? ? ? ? if (StringUtils.isBlank(id)) {

? ? ? ? ? ? return "";

? ? ? ? }

? ? ? ? String num = StringUtils.right(id, 4);

? ? ? ? return StringUtils.leftPad(num, StringUtils.length(id), "*");

? ? }

? ? /**

? ? * 【固定電話】 顯示后四位,其他隱藏,比如:*******3241

? ? *

? ? * @param num

? ? * @return

? ? */

? ? public static String fixedPhone(String num) {

? ? ? ? if (StringUtils.isBlank(num)) {

? ? ? ? ? ? return "";

? ? ? ? }

? ? ? ? return StringUtils.leftPad(StringUtils.right(num, 4), StringUtils.length(num), "*");

? ? }

? ? /**

? ? * 【手機號碼】前三位,后四位,其他隱藏,比如:135****6810

? ? *

? ? * @param num

? ? * @return

? ? */

? ? public static String mobilePhone(String num) {

? ? ? ? if (StringUtils.isBlank(num)) {

? ? ? ? ? ? return "";

? ? ? ? }

? ? ? ? return StringUtils.left(num, 3).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(num, 4), StringUtils.length(num), "*"), "***"));

? ? }

? ? /**

? ? * 【地址】只顯示到地區,不顯示詳細地址,比如:上海徐匯區漕河涇開發區***

? ? *

? ? * @param address

? ? * @param sensitiveSize 敏感信息長度

? ? * @return

? ? */

? ? public static String address(String address, int sensitiveSize) {

? ? ? ? if (StringUtils.isBlank(address)) {

? ? ? ? ? ? return "";

? ? ? ? }

? ? ? ? int length = StringUtils.length(address);

? ? ? ? return StringUtils.rightPad(StringUtils.left(address, length - sensitiveSize), length, "*");

? ? }

? ? /**

? ? * 【電子郵箱】 郵箱前綴僅顯示第一個字母,前綴其他隱藏,用星號代替,@及后面的地址顯示,比如:d**@126.com

? ? *

? ? * @param email

? ? * @return

? ? */

? ? public static String email(String email) {

? ? ? ? if (StringUtils.isBlank(email)) {

? ? ? ? ? ? return "";

? ? ? ? }

? ? ? ? int index = StringUtils.indexOf(email, "@");

? ? ? ? if (index <= 1)

? ? ? ? ? ? return email;

? ? ? ? else

? ? ? ? ? ? return StringUtils.rightPad(StringUtils.left(email, 1), index, "*").concat(StringUtils.mid(email, index, StringUtils.length(email)));

? ? }

? ? /**

? ? * 【銀行卡號】前六位,后四位,其他用星號隱藏每位1個星號,比如:6222600**********1234

? ? *

? ? * @param cardNum

? ? * @return

? ? */

? ? public static String bankCard(String cardNum) {

? ? ? ? if (StringUtils.isBlank(cardNum)) {

? ? ? ? ? ? return "";

? ? ? ? }

? ? ? ? return StringUtils.left(cardNum, 6).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(cardNum, 4), StringUtils.length(cardNum), "*"), "******"));

? ? }

? ? /**

? ? * 【密碼】密碼的全部字符都用*代替,比如:******

? ? *

? ? * @param password

? ? * @return

? ? */

? ? public static String password(String password) {

? ? ? ? if (StringUtils.isBlank(password)) {

? ? ? ? ? ? return "";

? ? ? ? }

? ? ? ? String pwd = StringUtils.left(password, 0);

? ? ? ? return StringUtils.rightPad(pwd, StringUtils.length(password), "*");

? ? }

}

最后

轉載請注明地址:http://www.54tianzhisheng.cn/2017/10/28/Data-Desensitization/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內容