美文网首页
Java敏感数据脱敏

Java敏感数据脱敏

作者: 千年的心 | 来源:发表于2020-08-12 11:48 被阅读0次

    1.背景

    在编码中,我们经常会对手机号,身份证号等数据进行脱敏处理,保护用户隐私,提高系统安全性。这边文章提供了xx*****xx格式的脱敏处理代码,希望对各位有所帮助。

    2. 实现

    1.定义接口,方便使用其它方式扩展

    /**
     * 脱敏接口定义
     *
     * @author lieber
     */
    public interface IDesensitization {
    
        String REPLACE_CHAR = "*";
    
        /**
         * 脱敏
         *
         * @param str   待脱敏字符串
         * @param left  左边保留多少位
         * @param right 右边保留多少位
         * @return 脱敏结果,除左右外,其余字符将被替换为*
         */
        String around(String str, int left, int right);
    
        /**
         * 身份证号脱敏
         *
         * @param cardNum 身份证号码
         * @return 脱敏后身份证号码,形如510**********1232
         */
        String idCard(String cardNum);
    
        /**
         * 电话号码脱敏
         *
         * @param phone 电话号码
         * @return 脱敏后电话号码,形如152****1232
         */
        String phone(String phone);
    
    }
    

    2.默认提供一种实现

    使用正则表达式,保留左右长度,替换中间为*

    import com.yugioh.core.util.words.desensitization.IDesensitization;
    
    /**
     * 默认脱敏实现
     *
     * @author lieber
     */
    public class DefaultDesensitizationImpl implements IDesensitization {
    
        @Override
        public String around(String str, int left, int right) {
            if (str == null || (str.length() < left + right + 1)) {
                return str;
            }
            String regex = String.format("(?<=\\w{%d})\\w(?=\\w{%d})", left, right);
            return str.replaceAll(regex, REPLACE_CHAR);
        }
    
        @Override
        public String idCard(String cardNum) {
            return this.around(cardNum, 3, 4);
        }
    
        @Override
        public String phone(String phone) {
            return this.around(phone, 3, 4);
        }
    }
    
    

    3.使用

    3.1静态工具类

    /**
     * 文字脱敏工具类
     *
     * @author lieber
     */
    public class WordsDesensitizationUtil {
    
        private static IDesensitization desensitization = new DefaultDesensitizationImpl();
    
        /**
         * 脱敏
         *
         * @param str   待脱敏字符串
         * @param left  左边保留多少位
         * @param right 右边保留多少位
         * @return 脱敏结果,除左右外,其余字符将被替换为*
         */
        public static String around(String str, int left, int right) {
            return desensitization.around(str, left, right);
        }
    
        /**
         * 身份证号脱敏
         *
         * @param cardNum 身份证号码
         * @return 脱敏后身份证号码,形如510**********1232
         */
        public static String idCard(String cardNum) {
            return desensitization.idCard(cardNum);
        }
    
        /**
         * 电话号码脱敏
         *
         * @param phone 电话号码
         * @return 脱敏后电话号码,形如152****1232
         */
        public static String phone(String phone) {
            return desensitization.phone(phone);
        }
    }
    

    3.1交给Spring管理

    @Bean
    public IDesensitization desensitization() {
        return new DefaultDesensitizationImpl();
    }
    

    相关文章

      网友评论

          本文标题:Java敏感数据脱敏

          本文链接:https://www.haomeiwen.com/subject/vtspdktx.html