Hutool脫敏詳解

在現代互聯網應用中,隨著大量敏感數據的處理,數據脫敏變得至關重要。Hutool作為一款Java工具類庫,在不同的應用場景中都提供了全面的脫敏能力,便於開發人員神不知鬼不覺地解決敏感數據的處理問題。本文將介紹Hutool脫敏的功能和使用,以及對應的Java代碼實現。

一、Hutool脫敏身份證

身份證號碼是最常出現的敏感信息之一。脫敏身份證的需求很常見,因為在實際業務中身份證號碼的真實性並不重要,重要的是保存數據的完整性和安全性。Hutool提供了默認的身份證脫敏策略,可以用於對身份證實現簡單而高效的脫敏。

/**
 * 脫敏身份證測試
 */
@Test
public void testDesensitizeIdCard() {
    String idCard = "510124199306355456";
    String desensitizedIdCard = DesensitizedUtil.desensitizedIdCard(idCard);
    //輸出結果為:510**********5456
    System.out.println(desensitizedIdCard);
}

上述代碼中調用了Hutool提供的DesensitizedUtil類中的desensitizedIdCard()方法,該方法將會使用默認的身份證脫敏策略,返回對應的脫敏結果。

二、Hutool脫敏工具

除了身份證號碼,其他類型的敏感數據通常沒有特定的格式。對於這種情況,Hutool提供了通用的脫敏工具,可以根據數據類型對敏感數據進行脫敏。

/**
 * 脫敏工具測試
 */
@Test
public void testDesensitize() {
    String str = "15651234567";
    String email = "test@163.com";
    String idCard = "510124199306355456";
    String bankCard = "622202***********";
    String address = "四川省成都市高新區天府大道中段399號";
    String desensitizedStr = DesensitizedUtil.desensitized(SensitiveTypeEnum.MOBILE_PHONE, str);
    String desensitizedEmail = DesensitizedUtil.desensitized(SensitiveTypeEnum.EMAIL, email);
    String desensitizedIdCard = DesensitizedUtil.desensitized(SensitiveTypeEnum.ID_CARD, idCard);
    String desensitizedBankCard = DesensitizedUtil.desensitized(SensitiveTypeEnum.BANK_CARD, bankCard);
    String desensitizedAddress = DesensitizedUtil.desensitized(SensitiveTypeEnum.ADDRESS, address);
    //輸出結果為:156****4567
    System.out.println(desensitizedStr);
    //輸出結果為:t**t@163.com
    System.out.println(desensitizedEmail);
    //輸出結果為:510**********5456
    System.out.println(desensitizedIdCard);
    //輸出結果為:622202***********
    System.out.println(desensitizedBankCard);
    //輸出結果為:四川省**********
    System.out.println(desensitizedAddress);
}

上述代碼中調用了Hutool提供的DesensitizedUtil類中的desensitized()方法,並指定了對應的敏感數據類型和脫敏規則,返回對應的脫敏結果。

三、Hutool脫敏自定義

在實際應用過程中,數據的敏感程度和脫敏方式都有很大的差異。面對這種需求區別,Hutool提供了自定義脫敏策略的能力,根據不同的需求定義自己的脫敏規則。

/**
 * 自定義脫敏規則測試,脫敏姓名中間部分
 */
@Test
public void testCustomDesensitizer() {
    String name = "張三";
    DesensitizedUtil.addCustomDesensitizer("MyName", (data) -> {
        if (StringUtils.isBlank(data)) {
            return "default";
        }
        int len = data.length();
        if (len <= 2) {
            return data;
        } else {
            StringBuilder sb = new StringBuilder();
            sb.append(data.charAt(0));
            for (int i = 1; i < len - 1; i++) {
                sb.append("*");
            }
            sb.append(data.charAt(len - 1));
            return sb.toString();
        }
    });
    String desensitizedName = DesensitizedUtil.desensitized("MyName", name);
    //輸出結果為:張*三
    System.out.println(desensitizedName);
}

上述代碼中,我們自定義了一個名為”MyName”的脫敏規則,並按照自己的需求實現了該規則,然後利用Hutool提供的API進行了測試和驗證。

四、Hutool脫敏還原

在某些場景下,需要將已脫敏的敏感數據還原為原始數據。Hutool提供了對應的API,可以方便地進行敏感數據還原。

/**
 * 脫敏數據還原測試
 */
@Test
public void testRecover() {
    String desensitizedStr = "156****4567";
    String desensitizedEmail = "t**t@163.com";
    String desensitizedIdCard = "510**********5456";
    String desensitizedBankCard = "622202***********";
    String desensitizedAddress = "四川省**********";
    String originalStr = DesensitizedUtil.recover(desensitizedStr);
    String originalEmail = DesensitizedUtil.recover(desensitizedEmail);
    String originalIdCard = DesensitizedUtil.recover(desensitizedIdCard);
    String originalBankCard = DesensitizedUtil.recover(desensitizedBankCard);
    String originalAddress = DesensitizedUtil.recover(desensitizedAddress);
    //輸出結果為:15651234567
    System.out.println(originalStr);
    //輸出結果為:test@163.com
    System.out.println(originalEmail);
    //輸出結果為:510124199306355456
    System.out.println(originalIdCard);
    //輸出結果為:622202***********
    System.out.println(originalBankCard);
    //輸出結果為:四川省成都市高新區天府大道中段399號
    System.out.println(originalAddress);
}

上述代碼中調用了Hutool提供的DesensitizedUtil類中的recover()方法,該方法將會使用默認的身份證脫敏策略,返回對應的原始數據。

五、Hutool數據脫敏選取

Hutool提供了多種脫敏方案,針對不同類型的數據,選擇不同的脫敏方案可以讓脫敏結果更加符合應用的實際需求。下面是Hutool支持的脫敏方案:

  • CHINESE_NAME:中文姓名
  • ID_CARD:身份證號碼
  • FIXED_PHONE:固定電話
  • MOBILE_PHONE:手機號碼
  • ADDRESS:地址
  • EMAIL:電子郵件
  • BANK_CARD:銀行卡號碼
  • CNAPS_CODE:中國銀行聯行號
  • DRIVING_LICENSE:機動車駕駛證號碼
  • VEHICLE_LICENSE:機動車行駛證號碼

根據不同的業務需求選擇不同的脫敏方案可以使得敏感數據的安全處理更加科學和規範。

原創文章,作者:RQOW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/138724.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
RQOW的頭像RQOW
上一篇 2024-10-04 00:21
下一篇 2024-10-04 00:21

相關推薦

  • Hutool——supplier1的使用

    在Java編程中,我們常常使用各種各樣的工具來幫助我們更快、更好地完成開發工作,而Hutool工具就是其中一種。作為一個Java工具類庫,Hutool提供了非常豐富的工具類和方法,…

    編程 2025-04-29
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25

發表回復

登錄後才能評論