zoukankan      html  css  js  c++  java
  • 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));
        }
    }
    古人学问无遗力,少壮工夫老始成。 纸上得来终觉浅,绝知此事要躬行。
  • 相关阅读:
    Python股票分析系列——系列介绍和获取股票数据.p1
    快速相关
    特别长序列的快速卷积
    长序列的快速卷积
    快速卷积
    素因子快速傅里叶变换
    用一个N点复序列的FFT同时计算两个N点实序列离散傅里叶变换
    实序列快速傅里叶变换(二)
    实序列快速傅里叶变换(一)
    java 对于手机号码、邮箱、银行卡号脱敏一条龙服务
  • 原文地址:https://www.cnblogs.com/wf-zhang/p/14846514.html
Copyright © 2011-2022 走看看