侧边栏壁纸
博主头像
拾荒的小海螺博主等级

只有想不到的,没有做不到的

  • 累计撰写 222 篇文章
  • 累计创建 19 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

JAVA:Desensitization 数据脱敏的技术指南

拾荒的小海螺
2024-12-10 / 0 评论 / 1 点赞 / 53 阅读 / 6784 字

1、简述

数据脱敏(Desensitization)是指通过对敏感数据进行部分或完全隐藏处理,保护敏感信息在存储和使用过程中的安全性。常见的应用场景包括日志记录、接口返回、报表展示、数据分析等,特别是在涉及用户隐私、支付信息和企业数据的系统中至关重要。

1733822613383.jpg

2、数据脱敏的意义

  • 保护隐私
    防止敏感数据泄露,如身份证号、银行卡号、手机号等。
  • 符合合规要求
    符合《个人信息保护法 (PIPL)》和《通用数据保护条例 (GDPR)》等法规。
  • 降低数据风险
    数据在传输和使用中即便泄露,敏感信息也不会暴露。

常见的脱敏场景:

  • 手机号脱敏
    示例:13912345678 -> 139****5678
  • 身份证号脱敏
    示例:123456789012345678 -> 123456********5678
  • 邮箱脱敏
    示例:example@gmail.com -> ex****@gmail.com
  • 银行卡号脱敏
    示例:6222020400112568888 -> 6222 **** **** 8888

3、数据脱敏的实现样例

3.1 自定义脱敏实现

添加脱敏工具类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 组件脱敏实现

以下是使用 red.zyc.desensitization 提供的 Maven 包实现数据脱敏功能的完整方案,包括 Maven 依赖和实现步骤。

red.zyc.desensitization 是一个专门用于数据脱敏的库,支持多种脱敏策略。以下是相关依赖:

<!-- 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 提供了基于注解和处理器的灵活脱敏功能,支持多种场景下的敏感数据保护,特别适合需要动态脱敏的 Java 项目。

4、总结

数据脱敏是保护敏感信息的关键技术,既可以通过简单的工具类实现常见场景的脱敏,也可以利用注解和反射实现灵活的自动脱敏。在实际开发中,建议根据业务需求和性能要求选择合适的脱敏方案,确保敏感信息安全。

应用场景:

  • 用户隐私展示:订单信息中的用户手机号或姓名。
  • 日志记录:记录错误信息时隐藏用户敏感数据。
  • 数据分析:在数据导出或共享时避免敏感信息泄露。

通过合理的脱敏策略,可以有效降低数据泄露的风险,同时符合隐私保护的法律要求。

1

评论区