您好,登錄后才能下訂單哦!
百度百科是這樣描述的:
數(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ù)梳理
在進(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), "*");
免責(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)容。