一、什么是数据脱敏?

  数据脱敏(Data Masking),又称数据漂白、数据去隐私化或数据变形。 
   
  百度百科对数据脱敏的定义为:指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。 
   
  生活中不乏数据脱敏的例子,比如我们最常见的火车票、电商收货人地址都会对敏感信息做处理,甚至女同志较熟悉的美颜、有些视频中的马赛克都属于脱敏。 

数据脱敏 Java 不可逆 数据脱敏的原则_序列化

二、为什么要进行数据脱敏?

  上面说到,在“涉及客户安全数据或者一些商业性敏感数据的情况下”对数据进行改造,说明我们要进行改造的数据是涉及到用户或者企业数据的安全,进行数据脱敏其实就是对这些数据进行加密,防止泄露。 
  

  对于脱敏的程度,一般来说只要处理到无法推断原有的信息,不会造成信息泄露即可,如果修改过多,容易导致丢失数据原有特性。因此,在实际操作中,需要根据实际场景来选择适当的脱敏规则。改姓名,身份证号,地址,手机号,电话号码等几个客户相关字段。

三、如何实现数据脱敏

  按照脱敏规则,可以分为可恢复性脱敏和不可恢复性脱敏。可恢复性脱敏就是数据经过脱敏规则的转化后,还再次可以经过某些处理还原出原来的数据,相反,数据经过不可恢复性脱敏之后,将无法还原到原来的样子,可以把二者分别看做可逆加密和不可逆加密。

  我们目前遇到的场景是日志脱敏,即在把日志中的密码,甚至姓名、身份证号等信息都进行脱敏处理。 

   

  脱敏前: 

   

数据脱敏 Java 不可逆 数据脱敏的原则_数据脱敏_02

  脱敏后: 

   

数据脱敏 Java 不可逆 数据脱敏的原则_数据_03

  如上图,仔细分析会发现,打日志之前,获得脱敏的数据就两个步骤:【拿到要输入的数据(user实体)】→【进行序列化】,所以要进行数据脱敏可以考虑在这两个步骤上进行实现。第一个方法就是在序列化实体之前先把需要脱敏的字段进行处理,之后正常序列化;第二个方法就是在实体序列化的时候,对要脱敏的字段进行处理。
 

四、SQL数据脱敏实现

CONCAT()、LEFT()和RIGHT()字符串函数组合使用,请看下面具体实现

  • CONCAT(str1,str2,…):返回结果为连接参数产生的字符串
  • LEFT(str,len):返回从字符串str 开始的len 最左字符
  • RIGHT(str,len):从字符串str 开始,返回最右len 字符

电话号码脱敏sql:

SELECT mobilePhone AS 脱敏前电话号码,CONCAT(LEFT(mobilePhone,3), ‘********’ ) AS 脱敏后电话号码 
FROM t_s_user

数据脱敏 Java 不可逆 数据脱敏的原则_序列化_04

身份证号码脱敏sql:

SELECT idcard AS 未脱敏身份证, CONCAT(LEFT(idcard,3), ‘****’ ,RIGHT(idcard,4)) AS 脱敏后身份证号 
FROM t_s_user

数据脱敏 Java 不可逆 数据脱敏的原则_sql脱敏_05