在現代互聯網應用中,隨著大量敏感數據的處理,數據脫敏變得至關重要。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