什么是数据脱敏?

百度百科是这样描述的:

数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如×××号、手机号、卡号、客户姓名、客户地址、等个人敏感信息都需要通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。这样就可以在开发、测试和其他非生产环境以及外包环境中可以安全的使用脱敏后的真实数据集。

生活中的常见例子

1、火车票:

2、淘宝网页上的收获地址信息:

敏感数据梳理

在进行数据脱敏之前我们应该要确定公司的哪些数据(哪些表、哪些字段)要作为脱敏的目标,下面从用户、公司、卖家反面分析:

1、用户:名字、手机号码、×××号码、固定电话、收货地址、电子邮箱、银行卡号、密码等

2、卖家:名字、手机号码、×××号码、固定电话等

3、公司:交易金额、优惠券码、充值码等

确定脱敏规则

确定好了公司的哪些数据要作为脱敏目标后,我们就需要制定脱敏的规则(具体的实施方法)。

常见方法:

1、替换:如统一将女性用户名替换为F,这种方法更像“障眼法”,对内部人员可以完全保持信息完整性,但易破解。

2、重排:序号12345 重排为 54321,按照一定的顺序进行打乱,很像“替换”, 可以在需要时方便还原信息,但同样易破解。

3、加密:编号 12345 加密为 23456,安全程度取决于采用哪种加密算法,一般根据实际情况而定。

4、截断:13811001111 截断为 138,舍弃必要信息来保证数据的模糊性,是比较常用的脱敏方法,但往往对生产不够友好。(丢失字段的长度)

5、掩码: 123456 -> 1xxxx6,保留了部分信息,并且保证了信息的长度不变性,对信息持有者更易辨别, 如火车票上得身份信息。(常用方法)

6、日期偏移取整:20130520 12:30:45 -> 20130520 12:00:00,舍弃精度来保证原始数据的安全性,一般此种方法可以保护数据的时间分布密度。

目前我的脱敏规则想法是:

1、【中文姓名】只显示第一个汉字,其他隐藏为2个星号,比如:李**

2、【×××号】显示最后四位,其他隐藏。共计18位或者15位,比如:*************1234

3、【固定电话】 显示后四位,其他隐藏,比如:*******3241

4、【手机号码】前三位,后四位,其他隐藏,比如:135****6810

5、【地址】只显示到地区,不显示详细地址,比如:上海徐汇区漕河泾开发区***

6、【电子邮箱】 邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,比如:d**@126.com

7、【银行卡号】前六位,后四位,其他用星号隐藏每位1个星号,比如:6222600**********1234

8、【密码】密码的全部字符都用代替,比如:*

根据以上规则进行数据脱敏!

具体思路目前是这样的:

从原数据源查询到的生产数据 ——> 数据脱敏 ——> 更新到目标数据源。

原数据源、目标数据源、需要脱敏的表、字段等都放在配置文件中,做到可扩展性!

脱敏工具代码

根据以上规则已经写好了一份简单的脱敏规则工具类。

/**

* 数据脱敏工具类

* Created by zhisheng_tian on 2017/10/25.

*/

public class DesensitizedUtils {

* 【中文姓名】只显示第一个汉字,其他隐藏为2个星号,比如:李**

*

* @param fullName

* @return

public static String chineseName(String fullName) {

if (StringUtils.isBlank(fullName)) {

return "";

}

String name = StringUtils.left(fullName, 1);

return StringUtils.rightPad(name, StringUtils.length(fullName), "*");

* 【×××号】显示最后四位,其他隐藏。共计18位或者15位,比如:*************1234

* @param id

public static String idCardNum(String id) {

if (StringUtils.isBlank(id)) {

String num = StringUtils.right(id, 4);

return StringUtils.leftPad(num, StringUtils.length(id), "*");

* 【固定电话】 显示后四位,其他隐藏,比如:*******3241

* @param num

public static String fixedPhone(String num) {

if (StringUtils.isBlank(num)) {

return StringUtils.leftPad(StringUtils.right(num, 4), StringUtils.length(num), "*");

* 【手机号码】前三位,后四位,其他隐藏,比如:135****6810

public static String mobilePhone(String num) {

return StringUtils.left(num, 3).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(num, 4), StringUtils.length(num), "*"), "***"));

* 【地址】只显示到地区,不显示详细地址,比如:上海徐汇区漕河泾开发区***

* @param address

* @param sensitiveSize 敏感信息长度

public static String address(String address, int sensitiveSize) {

if (StringUtils.isBlank(address)) {

int length = StringUtils.length(address);

return StringUtils.rightPad(StringUtils.left(address, length - sensitiveSize), length, "*");

* 【电子邮箱】 邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,比如:d**@126.com

* @param email

public static String email(String email) {

if (StringUtils.isBlank(email)) {

int index = StringUtils.indexOf(email, "@");

if (index <= 1)

return email;

else

return StringUtils.rightPad(StringUtils.left(email, 1), index, "*").concat(StringUtils.mid(email, index, StringUtils.length(email)));

* 【银行卡号】前六位,后四位,其他用星号隐藏每位1个星号,比如:6222600**********1234

* @param cardNum

public static String bankCard(String cardNum) {

if (StringUtils.isBlank(cardNum)) {

return StringUtils.left(cardNum, 6).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(cardNum, 4), StringUtils.length(cardNum), "*"), "******"));

* 【密码】密码的全部字符都用*代替,比如:******

* @param password

public static String password(String password) {

if (StringUtils.isBlank(password)) {

String pwd = StringUtils.left(password, 0);

return StringUtils.rightPad(pwd, StringUtils.length(password), "*");

原文地址:http://blog.51cto.com/zhaoshilei/2084316

时间: 2024-08-30 16:29:48

什么是数据脱敏?的相关文章

DataMasker数据脱敏

产品简介: Data Masker数据脱敏平台,专业处理敏感数据,内置针对不同行业的敏感数据发现规则,支持多任务并发,充分利用系统资源,提高脱敏效率,真正做到智能而人性化的任务管理. Data Masker保护隐私数据满足数据规格和业务一致性.保证业务可靠运行,实时动态保护生产系统数据.敏感数据统一管理 产品优势: 便捷易用的自动发现,内置针对不同行业的敏感数据发现规则,能够自动发现如姓名.身份证号.电话号码.银行账户.日期.地址.税号.金额等敏感信息,内置全面发现规则,高准确性识别,避免了使用

Oracle汉字用户名数据脱敏长度不变,rpad函数使用

信息安全考虑,有时需要对用户名称进行数据脱敏. 针对Oracle数据库,进行取数数据脱敏处理 脱敏规则: 长度小于9个字符,只保留前3个汉字与后3个汉字,中间全部由*填充. 长度9个字及以上及奇数,隐去中间3个字:长度10个字及以上及奇数,隐去中间4个字. 例如: 公司名称:宇宙无敌厉害的超级大公司的杭州分公司 字段长度:18 脱敏后:宇宙无敌厉害的****司的杭州分公司 可实现的正确答案: select t.no, ---公司编号 case when length(t.name)<=8 the

大数据脱敏

简介 大数据平台通过将所有数据整合起来,充分分析与挖掘数据的内在价值,为业务部门提供数据平台,数据产品与数据服务.大数据平台接入的数据中可能包括很多用户的隐私和敏感信息,如用户在酒店的入住纪录,用户支付信息等,这些数据存在可能泄漏的风险.大数据平台一般通过用户认证,权限管理以及数据加密等技术保证数据的安全,但是这并不能完全从技术上保证数据的安全.严格的来说,任何有权限访问用户数据的人员,如ETL工程师或是数据分析人员等,均有可能导致数据泄漏的风险.另一方面,没有访问用户数据权限的人员,也可能有对

工具类-数据脱敏

针对姓名.电话.地址.邮箱等敏感信息进行脱敏操作,代码如下: 1 import org.apache.commons.lang.StringUtils; 2 3 /** 4 * 数据脱敏工具类 5 * Created by shenruihai on 2018/06/13. 6 */ 7 public class Desensitized { 8 9 /** 10 * [中文姓名]只显示第一个汉字,其他隐藏为2个星号,比如:李** 11 * 12 * @param fullName 13 * @

数据脱敏

https://www.cnblogs.com/yangzailu/p/6755440.html 数据脱敏介绍 数据脱敏(Data Masking),又称数据漂白.数据去隐私化或数据变形.百度百科对数据脱敏的定义为:指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据 的可靠保护.这样,就可以在开发.测试和其它非生产环境以及外包环境中安全地使用脱敏后的真实数据集. 可以看到数据脱敏具有几个关键点:敏感数据.脱敏规则.使用环境. 敏感数据,又称隐私数据,常见的敏感数据有: 姓名.身份证号码

Java 数据脱敏

数据脱敏 数据脱敏又称数据去隐私化或数据变形,是在给定的规则.策略下对敏感数据进行变换.修改的技术机制,能够在很大程度上解决敏感数据在非可信环境中使用的问题.根据数据保护规范和脱敏策略.对业务数据中的敏感信息实施自动变形.实现对敏感信息的隐藏. 脱敏方法 项目是在controller层进行脱敏,查阅google和github有两种较为方便的方法 一种是基于注解 desensitized基于注解的形式进行脱敏 GitHub 一种是基于框架本质上还是注解,但是已经封装好了,当然还提供fastjson

基于注解形式的数据脱敏

数据脱敏 注解定义 package cn.com.sensitive.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 敏感方法 * * @author zhanghao * @date 2

Spring的历史论(数据脱敏)

目前很多公司的架构,从Struts2迁移到了SpringMVC.你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢? 既然这样,我们从源头说起.Struts2的源头其实也是Servlet.Servlet的作用是接收浏览器传给服务端的请求(request),并将服务端处理完的响应(response)返回给用户的浏览器,浏览器和服务端之间通过http协议进行沟通,其过程是浏览器根据用户的选择将相关信息按http协议报文的规范组装请求的http报文,报文

java 日志的数据脱敏

思路 1.在 model层进行处理,直接重写get方法,在写一个getPlain 获取明文方法.(缺点:数据库写入和json序列化传递时使用的都是密文) 2.利用 日志组件过滤 特定的key,去进行脱敏(缺点:对所有的日志输出全部要正则匹配,非常耗时.) 由1,2的利弊,肯定会选择1,然后考虑一种实现(在model层定义方法,获取它的一个复制类,复制类里面的信息都是脱敏的,日志输出时只输出 复制对象),克服掉1的缺点 1.定义接口类 public interface NoSensitiveObj