JAVA常用的几种数据脱敏方式

253 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

JAVA常用的几种数据脱敏方式

概述

数据脱敏指的是对某些隐私数据或者敏感信息,例如客户的手机号、银行卡号、身份证信息等进行数据的变形,根据给定的一些脱敏规则,将一些信息进行变换。在数据泄露或者隐私泄露时,可以防止获取到全部信息,只能获取到脱敏之后的部分信息,并且很难推算出隐藏的信息。数据脱敏一般有配置文件的数据脱敏、接口返回值的数据脱敏、日志文件信息的数据脱敏等等。

1. SQL层面进行数据脱敏

使用sql对手机号、身份证进行数据脱敏。

SELECT id_card, CONCAT(LEFT(id_card,3), '****' ,RIGHT(id_card,4)) AS id_card_obfuscation FROM t_user

2. hutools工具

  • 引入hutoolsjar包

    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.8.10</version>
    </dependency>
    
  • 使用信息脱敏工具,此处采用官方的一些示例。

    身份证号数据脱敏

    // 5***************1X
    DesensitizedUtil.idCardNum("51343620000320711X", 1, 2);
    

    手机号数据脱敏

    // 180****1999
    DesensitizedUtil.mobilePhone("18049531999");
    

    密码信息数据脱敏

    // **********
    DesensitizedUtil.password("1234567890");
    

3. 使用mybatis-mate-sensitive-jackson

mybatis-mate-sensitive-jackson是Mybatis-plus官方推荐的一款工具,其中内置手机号、邮箱、银行卡号等9中常用的脱敏规则,也可以自定义数据脱敏规则。注意:这个是mp的企业级模块,使用需要获得作者的授权。

  • 使用@FieldSensitive注解

4. 使用自定义注解

使用自定义注解,类似于@JsonFormat(pattern = DateConstant.FULL_DATE_PATTERN, timezone = "GMT+8"),我们需要自己编写脱敏的序列化类,代码工作量较大,原理就是在对象序列化的时候,将一些字符进行替换。

5. 使用jasypt-spring-boot插件

地址:github.com/ulisesbocch…

该插件使用比较简单,直接在pom文件中添加jasypt-spring-boot-starter即可。该工具可以加密配置文件信息,例如数据库连接,数据库账号密码,短信秘钥,redis的账号、密码等等。

<dependency>
  <groupId>com.github.ulisesbocchio</groupId>
  <artifactId>jasypt-spring-boot-starter</artifactId>
  <version>3.0.4</version>
</dependency>

6. log4j2日志文件的数据脱敏

针对log4j2日志文件的数据脱敏,我们可以编写自定义的PatternLayout来实现日志文件的数据脱敏,在自定义的PatternLayout中根据脱敏规则对日志中的信息进行替换。

总结

以上只是简单归纳了几种数据脱敏的方案,具体的实现步骤以及实现示例,后面有空给大家整理一下,也可以按照思路,网上找找方案自己实现一下。