溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2020-06-14 09:22:33 來源:網(wǎng)絡(luò) 閱讀:2177 作者:zancun 欄目:數(shù)據(jù)安全

百度百科是這樣描述的:

數(shù)據(jù)脫敏是指對某些敏感信息通過脫敏規(guī)則進(jìn)行數(shù)據(jù)的變形,實現(xiàn)敏感隱私數(shù)據(jù)的可靠保護(hù)。在涉及客戶安全數(shù)據(jù)或者一些商業(yè)性敏感數(shù)據(jù)的情況下,在不違反系統(tǒng)規(guī)則條件下,對真實數(shù)據(jù)進(jìn)行改造并提供測試使用,如×××號、手機號、卡號、客戶姓名、客戶地址、等個人敏感信息都需要通過脫敏規(guī)則進(jìn)行數(shù)據(jù)的變形,實現(xiàn)敏感隱私數(shù)據(jù)的可靠保護(hù)。這樣就可以在開發(fā)、測試和其他非生產(chǎn)環(huán)境以及外包環(huán)境中可以安全的使用脫敏后的真實數(shù)據(jù)集。

生活中的常見例子

1、火車票:

2、淘寶網(wǎng)頁上的收獲地址信息:

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

敏感數(shù)據(jù)梳理

在進(jìn)行數(shù)據(jù)脫敏之前我們應(yīng)該要確定公司的哪些數(shù)據(jù)(哪些表、哪些字段)要作為脫敏的目標(biāo),下面從用戶、公司、賣家反面分析:

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

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

3、公司:交易金額、優(yōu)惠券碼、充值碼等

確定脫敏規(guī)則

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

常見方法:

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

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

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

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

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

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

目前我的脫敏規(guī)則想法是:

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

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

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

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

5、【地址】只顯示到地區(qū),不顯示詳細(xì)地址,比如:上海徐匯區(qū)漕河涇開發(fā)區(qū)***

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

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

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

根據(jù)以上規(guī)則進(jìn)行數(shù)據(jù)脫敏!

具體思路目前是這樣的:

從原數(shù)據(jù)源查詢到的生產(chǎn)數(shù)據(jù) ——> 數(shù)據(jù)脫敏 ——> 更新到目標(biāo)數(shù)據(jù)源。

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

脫敏工具代碼

根據(jù)以上規(guī)則已經(jīng)寫好了一份簡單的脫敏規(guī)則工具類。

/**

* 數(shù)據(jù)脫敏工具類

* 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

public static String idCardNum(String id) {

if (StringUtils.isBlank(id)) {

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

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

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

* @param num

public static String fixedPhone(String num) {

if (StringUtils.isBlank(num)) {

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

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

public static String mobilePhone(String num) {

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

* 【地址】只顯示到地區(qū),不顯示詳細(xì)地址,比如:上海徐匯區(qū)漕河涇開發(fā)區(qū)***

* @param address

* @param sensitiveSize 敏感信息長度

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

if (StringUtils.isBlank(address)) {

int length = StringUtils.length(address);

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

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

* @param email

public static String email(String email) {

if (StringUtils.isBlank(email)) {

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

public static String bankCard(String cardNum) {

if (StringUtils.isBlank(cardNum)) {

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

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

* @param password

public static String password(String password) {

if (StringUtils.isBlank(password)) {

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

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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI