数据脱敏的方法

数据脱敏(Data Masking) 是指通过对敏感数据进行变形、替换、加密等处理,使其在保持可用性的同时,避免泄露真实信息。数据脱敏广泛应用于数据共享、测试、开发、分析等场景,是数据安全的重要组成部分。


数据脱敏的核心目标

  1. 保护隐私:防止敏感数据(如身份证号、手机号、银行卡号等)泄露。

  2. 保持数据可用性:脱敏后的数据应保留原始数据的格式和部分特征,以便在测试或分析中使用。

  3. 合规性:满足法律法规(如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("(?<=\
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值