Java實現(xiàn)數(shù)據(jù)脫敏(Desensitization)的操作指南
1、簡述
數(shù)據(jù)脫敏(Desensitization)是指通過對敏感數(shù)據(jù)進行部分或完全隱藏處理,保護敏感信息在存儲和使用過程中的安全性。常見的應用場景包括日志記錄、接口返回、報表展示、數(shù)據(jù)分析等,特別是在涉及用戶隱私、支付信息和企業(yè)數(shù)據(jù)的系統(tǒng)中至關重要。
2、數(shù)據(jù)脫敏的意義
保護隱私
防止敏感數(shù)據(jù)泄露,如身份證號、銀行卡號、手機號等。符合合規(guī)要求
符合《個人信息保護法 (PIPL)》和《通用數(shù)據(jù)保護條例 (GDPR)》等法規(guī)。降低數(shù)據(jù)風險
數(shù)據(jù)在傳輸和使用中即便泄露,敏感信息也不會暴露。
常見的脫敏場景:
手機號脫敏
示例:13912345678 -> 139****5678身份證號脫敏
示例:123456789012345678 -> 123456********5678郵箱脫敏
示例:example@gmail.com -> ex****@gmail.com銀行卡號脫敏
示例:6222020400112568888 -> 6222 **** **** 8888
3、數(shù)據(jù)脫敏的實現(xiàn)樣例
3.1 自定義脫敏實現(xiàn)
添加脫敏工具類DesensitizationUtils:
public class DesensitizationUtils { // 手機號脫敏 public static String maskPhone(String phone) { if (phone == null || phone.length() != 11) { return phone; } return phone.substring(0, 3) + "****" + phone.substring(7); } // 身份證號脫敏 public static String maskIdCard(String idCard) { if (idCard == null || idCard.length() < 15) { return idCard; } return idCard.substring(0, 6) + "********" + idCard.substring(idCard.length() - 4); } // 郵箱脫敏 public static String maskEmail(String email) { if (email == null || !email.contains("@")) { return email; } int atIndex = email.indexOf("@"); if (atIndex <= 1) { return email; } return email.substring(0, 2) + "****" + email.substring(atIndex); } // 銀行卡號脫敏 public static String maskBankCard(String bankCard) { if (bankCard == null || bankCard.length() < 16) { return bankCard; } return bankCard.substring(0, 4) + " **** **** " + bankCard.substring(bankCard.length() - 4); } }
脫敏使用樣例:
public class Main { public static void main(String[] args) { String phone = "13912345678"; String idCard = "123456789012345678"; String email = "example@gmail.com"; String bankCard = "6222020400112568888"; System.out.println("脫敏后的手機號: " + DesensitizationUtils.maskPhone(phone)); System.out.println("脫敏后的身份證號: " + DesensitizationUtils.maskIdCard(idCard)); System.out.println("脫敏后的郵箱: " + DesensitizationUtils.maskEmail(email)); System.out.println("脫敏后的銀行卡號: " + DesensitizationUtils.maskBankCard(bankCard)); } }
3.1 引用 red.zyc 組件脫敏實現(xiàn)
以下是使用 red.zyc.desensitization 提供的 Maven 包實現(xiàn)數(shù)據(jù)脫敏功能的完整方案,包括 Maven 依賴和實現(xiàn)步驟。
red.zyc.desensitization 是一個專門用于數(shù)據(jù)脫敏的庫,支持多種脫敏策略。以下是相關依賴:
<!-- data desensitization--> <dependency> <groupId>red.zyc</groupId> <artifactId>desensitization</artifactId> <version>2.4.3</version> </dependency>
red.zyc.desensitization 提供了基于注解的脫敏機制,首先為需要脫敏的字段添加注解:
package com.example.springbootclient.entry; import red.zyc.desensitization.annotation.*; public class User { @ChineseNameSensitive private String name; @IdCardNumberSensitive private String idCard; @PhoneNumberSensitive private String phone; @EmailSensitive private String email; @PasswordSensitive private String password; // Getters and Setters public String getName() { return name; } public void setName(String name) { this.name = name; } public String getIdCard() { return idCard; } public void setIdCard(String idCard) { this.idCard = idCard; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
利用庫中的Sensitive 工具類進行脫敏:
public class DesensitizationController { public static void main(String[] args) { User user = new User(); user.setEmail("admin@gmail.com"); user.setPassword("89144552522"); user.setName("admin"); user.setPhone("13845988146"); user.setIdCard("6222020400112568888"); user = Sensitive.desensitize(user); System.out.println("脫敏后的用戶信息: " + JSON.toJSONString(user)); } }
輸出示例:
脫敏后的用戶信息: {"email":"a****@gmail.com","idCard":"622202*********8888","name":"a****","password":"***********","phone":"138****8146"}
red.zyc.desensitization 提供了基于注解和處理器的靈活脫敏功能,支持多種場景下的敏感數(shù)據(jù)保護,特別適合需要動態(tài)脫敏的 Java 項目。
4、總結
數(shù)據(jù)脫敏是保護敏感信息的關鍵技術,既可以通過簡單的工具類實現(xiàn)常見場景的脫敏,也可以利用注解和反射實現(xiàn)靈活的自動脫敏。在實際開發(fā)中,建議根據(jù)業(yè)務需求和性能要求選擇合適的脫敏方案,確保敏感信息安全。
應用場景:
- 用戶隱私展示:訂單信息中的用戶手機號或姓名。
- 日志記錄:記錄錯誤信息時隱藏用戶敏感數(shù)據(jù)。
- 數(shù)據(jù)分析:在數(shù)據(jù)導出或共享時避免敏感信息泄露。
通過合理的脫敏策略,可以有效降低數(shù)據(jù)泄露的風險,同時符合隱私保護的法律要求。
到此這篇關于Java實現(xiàn)數(shù)據(jù)脫敏(Desensitization)的操作指南的文章就介紹到這了,更多相關Java數(shù)據(jù)脫敏內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Mybatis中動態(tài)SQL,if,where,foreach的使用教程詳解
MyBatis的動態(tài)SQL是基于OGNL表達式的,它可以幫助我們方便的在SQL語句中實現(xiàn)某些邏輯。這篇文章主要介紹了Mybatis中動態(tài)SQL,if,where,foreach的使用教程,需要的朋友可以參考下2017-11-11解決springboot?部署到?weblogic?中?jar?包沖突的問題
這篇文章主要介紹了springboot?部署到?weblogic?中?jar?包沖突,weblogic?也有是解決方案的,可以通過新增并配置?weblogic.xml?文件來定義哪些類需要優(yōu)先從項目工程包的?jar?包中加載,本文給大家分享解決方法,需要的朋友可以參考下2022-08-08SpringMVC中Json數(shù)據(jù)交互處理示例詳解
這篇文章主要介紹了SpringMVC中Json數(shù)據(jù)交互處理的相關資料,分別講解了JSON的基本概念、構成要素、數(shù)據(jù)類型、對象和數(shù)組的表示方法、字符串的轉義規(guī)則以及JSON與JavaScript的關系,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-03-03Spring SpringMVC在啟動完成后執(zhí)行方法源碼解析
這篇文章主要介紹了SpringMVC在啟動完成后執(zhí)行方法源碼解析,還是非常不錯的,在這里分享給大家,需要的朋友可以參考下。2017-09-09輸出java進程的jstack信息示例分享 通過線程堆棧信息分析java線程
通過ps到java進程號將進程的jstack信息輸出。jstack信息是java進程的線程堆棧信息,通過該信息可以分析java的線程阻塞等問題。2014-01-01