1.什么是数据脱敏?
数据脱敏是一种数据安全技术,用于保护敏感数据,以防止未经授权的访问和使用。数据脱敏通过对敏感数据进行一定程度的修改或替换,以隐藏敏感信息,同时保留数据的完整性和可用性,通常应用于测试、开发和演示环境中。
数据脱敏的优势
数据脱敏具有以下优势:
保护敏感数据:数据脱敏可以保护敏感数据,以防止未经授权的访问和使用,从而保护个人隐私和数据安全;
遵守法规和合规要求:许多国家和地区的法规和合规要求对敏感数据进行保护和脱敏,数据脱敏可以帮助企业达到这些要求;
提高数据安全性:数据脱敏可以降低数据泄露和数据盗窃的风险,从而提高数据安全性;
支持开发和测试:数据脱敏可以在开发和测试环境中使用,以避免在这些环境中泄露敏感信息,同时保留数据的完整性和可用性;
保护商业机密:数据脱敏可以帮助企业保护商业机密,例如客户列表、销售数据等。
数据脱敏有哪些常用的方法
常用的数据脱敏方法包括:
随机化:通过将敏感数据替换为随机值或者伪随机值,保护原始数据的真实性。例如,将姓名替换为随机字符串;
掩码:通过将敏感数据的一部分替换为掩码,隐藏部分敏感信息。例如,将电话号码的后四位替换为星号;
加密:通过对敏感数据进行加密,保护数据的机密性。例如,对信用卡号码进行加密;
截断:通过截断敏感数据的一部分或全部,限制访问敏感信息的范围。例如,只显示姓名的首字母;
数据分区:将敏感数据分成多个区域,在不同的区域应用不同的脱敏技术,保护数据的隐私和机密性;
虚拟化:在测试和开发环境中使用虚拟数据代替真实数据,虚拟数据可以是随机生成的、采样的或者是经过脱敏处理的;
数据屏蔽:通过定义数据访问权限、角色和规则,限制用户访问敏感数据的范围和权限,保护数据的机密性和完整性;
数据分类:将数据按照敏感程度分类,对不同级别的数据采用不同的脱敏技术和措施,保障数据的安全性。
数据脱敏需要注意哪些事项
在进行数据脱敏时,需要注意以下事项:
数据完整性:数据脱敏可能会修改或删除原始数据,影响数据的完整性。因此,在进行数据脱敏时,需要确保脱敏操作不会影响数据的完整性和准确性;
数据可用性:数据脱敏可能会使原始数据不可用,影响数据的可用性。因此,在进行数据脱敏时,需要确保脱敏操作不会影响数据的可用性和访问性;
数据安全性:在进行数据脱敏时,需要注意保护脱敏过程中使用的算法、密钥和工具,以防止数据泄露和被攻击;
脱敏方法的适用性:不同的脱敏方法适用于不同类型的数据和场景。在选择脱敏方法时,需要考虑数据类型、敏感程度和使用场景等因素,以确保脱敏方法的适用性和有效性;
法规和合规要求:一些国家和地区的法规和合规要求对敏感数据进行保护和脱敏。在进行数据脱敏时,需要遵守当地的法规和合规要求。
desensitization简介
desensitization是基于Java反射api、零依赖、简单易用、支持各种复杂数据结构的数据脱敏库,包含但不限于以下类型的数据脱敏:
邮箱
手机号码
中文名称
身份证号码
银行卡号码
密码
统一社会信用代码
任意CharSequence类型的值
级联脱敏
2.代码工程
实验目标
通过desensitization包实现对敏感数据脱敏处理
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springboot-demo</artifactId> <groupId>com.et</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>desensitization</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- data desensitization--> <dependency> <groupId>red.zyc</groupId> <artifactId>desensitization</artifactId> <version>2.4.3</version> </dependency> </dependencies> </project>
controller
package com.et.desensization.controller; import com.et.desensization.dto.Teacher; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import red.zyc.desensitization.Sensitive; import java.util.HashMap; import java.util.Map; @RestController public class HelloWorldController { @RequestMapping("/hello") public Teacher showHelloWorld(){ Teacher teacher = Sensitive.desensitize(new Teacher(1,"Harries BLOG","400000000000000000","15900000000","1420000000@qq.com","123456789")); return teacher; } }
dto
在对象上加上脱敏注解:
package com.et.desensization.dto; import red.zyc.desensitization.annotation.*; public class Teacher { private Integer id; @ChineseNameSensitive private String name; @IdCardNumberSensitive private String idCard; @PhoneNumberSensitive private String tel; @EmailSensitive private String email; @PasswordSensitive private String password; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getIdCard() { return idCard; } public void setIdCard(String idCard) { this.idCard = idCard; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Teacher() { } public Teacher(Integer id, String name, String idCard, String tel, String email, String password) { this.id = id; this.name = name; this.idCard = idCard; this.tel = tel; this.email = email; this.password = password; } @Override public String toString() { return "Teacher{" + "id=" + id + ", name='" + name + '\'' + ", idCard='" + idCard + '\'' + ", tel='" + tel + '\'' + ", email='" + email + '\'' + ", password='" + password + '\'' + '}'; } }
以上只是一些关键代码,所有代码请参见下面代码仓库
代码仓库
https://github.com/Harries/springboot-demo(desensitization)
3.测试
启动Spring Boot应用
访问http://127.0.0.1:8088/hello
结果可以看到,
new Teacher(1,"Harries BLOG","400000000000000000","15900000000","1420000000@qq.com","123456789")
原始数据脱敏后变成如下加密的效果
{"id":1,"name":"H***********","idCard":"400000********0000","tel":"159****0000","email":"1*********@qq.com","password":"*********"}
还没有评论,来说两句吧...