数据脱敏(Data Masking) 是指通过对敏感数据进行变形、替换、加密等处理,使其在保持可用性的同时,避免泄露真实信息。数据脱敏广泛应用于数据共享、测试、开发、分析等场景,是数据安全的重要组成部分。
数据脱敏的核心目标
-
保护隐私:防止敏感数据(如身份证号、手机号、银行卡号等)泄露。
-
保持数据可用性:脱敏后的数据应保留原始数据的格式和部分特征,以便在测试或分析中使用。
-
合规性:满足法律法规(如GDPR、CCPA等)对数据隐私保护的要求
以下是Java中常用的数据脱敏方式及其实现方法:
1. 字符遮盖法(Masking)
这是最常见的脱敏手段之一,简单粗暴。通常通过替换部分字符为特定符号(如*)来实现,数据仍然保留部分可识别信息,但不会透露完整内容
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
/**
* 数据脱敏工具类
*/
public class DataMaskingUtil {
/**
* DES加密方法 是对称加密,相同的密钥进行加密和解密
* 加密/解密key是同一个
*/
public static final String DES_KEY="admin-root";
/**
* 手机号脱敏
* @param phone
* @return
*/
public static String maskPhone(String phone) {
if (phone == null || phone.length() != 11) {
// 无法脱敏时,直接返回原号码
return phone;
}
return phone.replaceAll("(?<=\\d{3})\\d(?=\\d{4})", "*");
}
/**
* 身份证号脱敏
* @param idCard
* @return
*/
public static String maskIdCard(String idCard) {
if (idCard == null || idCard.length() < 8) {
return idCard;
}
// 保留前4位和后4位,中间用 * 替换
return idCard.replaceAll("(?<=\\d{4})\\d(?=\\d{4})", "*");
}
/**
* 邮箱脱敏
* @param email
* @return
*/
public static String maskEmail(String email) {
if (email == null || !email.contains("@")) {
return email;
}
String[] parts = email.split("@");
String username = parts[0];
String domain = parts[1];
// 用户名部分保留前1位和后1位,中间用 * 替换,例如719345678@qq.com显示为7*******8@qq.com
if (username.length() > 2) {
username = username.charAt(0) + StrUtil.repeat("*", username.length() - 2) + username.charAt(username.length() - 1);
}
return username + "@" + domain;
}
public static String maskBankCard(String bankCard) {
if (bankCard == null || bankCard.length() < 8) {
return bankCard;
}
// 保留前4位和后4位,中间用 * 替换
return bankCard.replaceAll("(?<=\


3309

被折叠的 条评论
为什么被折叠?



