java工具类实现数据脱敏

接上文 实现了数据加密储存  https://www.cnblogs.com/wf-zhang/p/14842403.html

新需求 java后台实现数据脱敏即敏感信息部分显示

最终效果如下

思路 

1.自己定义脱敏规则 就是隐藏什么数据   自己构建个工具类

  实现效果   张* 王*五 欧阳娜* 136******** 410*************** 北京市*************

  两个字隐藏第二个字
  单个字隐藏中间字

  字符数字超过三个 后面的有隐藏

2.在上文中自定义类型处理器解密处理后再加上脱敏处理

开始操作

脱敏工具类

public class DesensitizationUtil {
 
    private static final int SIZE = 6;
    private static final String SYMBOL = "*";

    /**
     * 通用脱敏方法
     * @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 % 3;
        StringBuilder stringBuilder = new StringBuilder();
        if (len <= 2) {
            if (pamathree == 1) {
                return SYMBOL;
            }
            stringBuilder.append(value.charAt(0));
            stringBuilder.append(SYMBOL);
        } else {
            if (pamatwo <= 0) {
                stringBuilder.append(value.substring(0, 1));
                stringBuilder.append(SYMBOL);
                stringBuilder.append(value.substring(len - 1, len));

            }else {
                stringBuilder.append(value.substring(0, 3));
                for (int i = 0; i < len-3; i++) {
                    stringBuilder.append(SYMBOL);
                }
            }
        }
        return stringBuilder.toString();
    }
}

2.类型处理器解密后再加上脱敏处理

public class AESHandler extends BaseTypeHandler {

    private final  String password = "Vt*************=";

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, AESUtil.encrypt((String)parameter, password));
    }
    @Override
    public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String columnValue = rs.getString(columnName);
        return DesensitizationUtil.commonDisplay(AESUtil.decrypt(columnValue, password));
    }
    @Override
    public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String columnValue = rs.getString(columnIndex);
        return DesensitizationUtil.commonDisplay(AESUtil.decrypt(columnValue, password));
    }
    @Override
    public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String columnValue = cs.getString(columnIndex);
        return DesensitizationUtil.commonDisplay(AESUtil.decrypt(columnValue, password));
    }
}
古人学问无遗力,少壮工夫老始成。 纸上得来终觉浅,绝知此事要躬行。
原文地址:https://www.cnblogs.com/wf-zhang/p/14846514.html