敏感信息脫敏實現

一、簡述

  數據脫敏是指對某些敏感信息通過脫敏規則進行數據的變形,實現敏感隱私數據的可靠保護。簡單來說就是你有些數據並不想讓別人看見,需要進行處理再顯示在頁面上。

  舉個最簡單的例子,比如我們在點外賣的時候,外賣單子上會有我們的電話號碼,平台為了保證我們的信息不被泄露,就使用信息脫敏來將部分信息進行隱藏來達到保護我們信息的目的。

二、如何使用

1、相關代碼
package com.zhouhong.utils;

import sun.applet.Main;

public class DesensitizationUtil {
    private static final int SIZE = 6;
    private static final String SYMBOL = "*";
    public static void main(String[] args) {
        String address = commonDisplay("陝西省西安市雁塔區xx102號");
        System.out.println(address);
    }
    /**
     * 通用脫敏方法
     * @param value
     * @return
     */
    public static String commonDisplay(String value) {
        if (null == value || "".equals(value)) {
            return value;
        }
        int len = value.length();
        int pamaone = len / 2;
        int pamatwo = pamaone - 1;
        int pamathree = len % 2;
        StringBuilder stringBuilder = new StringBuilder();
        if (len <= 2) {
            if (pamathree == 1) {
                return SYMBOL;
            }
            stringBuilder.append(SYMBOL);
            stringBuilder.append(value.charAt(len - 1));
        } else {
            if (pamatwo <= 0) {
                stringBuilder.append(value.substring(0, 1));
                stringBuilder.append(SYMBOL);
                stringBuilder.append(value.substring(len - 1, len));

            } else if (pamatwo >= SIZE / 2 && SIZE + 1 != len) {
                int pamafive = (len - SIZE) / 2;
                stringBuilder.append(value.substring(0, pamafive));
                for (int i = 0; i < SIZE; i++) {
                    stringBuilder.append(SYMBOL);
                }
                if ((pamathree == 0 && SIZE / 2 == 0) || (pamathree != 0 && SIZE % 2 != 0)) {
                    stringBuilder.append(value.substring(len - pamafive, len));
                } else {
                    stringBuilder.append(value.substring(len - (pamafive + 1), len));
                }
            } else {
                int pamafour = len - 2;
                stringBuilder.append(value.substring(0, 1));
                for (int i = 0; i < pamafour; i++) {
                    stringBuilder.append(SYMBOL);
                }
                stringBuilder.append(value.substring(len - 1, len));
            }
        }
        return stringBuilder.toString();
    }
}
2、測試

 

 

 3、項目中如何使用

  在項目中只需要引入上面的類,然後在業務層需要脫敏的地方調用此方法即可。比如如下方法對評論的人姓名信息進行一定的脫敏處理

@Transactional(propagation = Propagation.SUPPORTS)
    @Override
    public PagedGridResult queryPagedComments(String itemId,
                                                  Integer level,
                                                  Integer page,
                                                  Integer pageSize) {
        Map<String, Object> map = new HashMap<>();
        map.put("itemId", itemId);
        map.put("level", level);
        //mybatis-pagehelper
        /**
         * page: 第幾頁
         * pageSize: 每頁顯示條數
         */
        PageHelper.startPage(page, 10);
        List<ItemCommentVO> list = itemsMapperCustom.queryItemComments(map);
        for (ItemCommentVO vo : list ) {
            vo.setNickName(DesensitizationUtil.commonDisplay(vo.getNickName()));
        }
        return setterPagedGrid(list, page);
    }
    private PagedGridResult setterPagedGrid(List<?> list ,Integer page){
        PageInfo<?> pageList = new PageInfo<>(list);
        PagedGridResult grid = new PagedGridResult();
        grid.setPage(page);
        grid.setRows(list);
        grid.setTotal(pageList.getPages());
        grid.setRecords(pageList.getTotal());
        return grid;
    }