Spring Boot如何实现数据脱敏?

1.什么是数据脱敏?

数据脱敏是一种数据安全技术,用于保护敏感数据,以防止未经授权的访问和使用。数据脱敏通过对敏感数据进行一定程度的修改或替换,以隐藏敏感信息,同时保留数据的完整性和可用性,通常应用于测试、开发和演示环境中。

数据脱敏的优势

数据脱敏具有以下优势:

  • 保护敏感数据:数据脱敏可以保护敏感数据,以防止未经授权的访问和使用,从而保护个人隐私和数据安全;

  • 遵守法规和合规要求:许多国家和地区的法规和合规要求对敏感数据进行保护和脱敏,数据脱敏可以帮助企业达到这些要求;

  • 提高数据安全性:数据脱敏可以降低数据泄露和数据盗窃的风险,从而提高数据安全性;

  • 支持开发和测试:数据脱敏可以在开发和测试环境中使用,以避免在这些环境中泄露敏感信息,同时保留数据的完整性和可用性;

  • 保护商业机密:数据脱敏可以帮助企业保护商业机密,例如客户列表、销售数据等。

数据脱敏有哪些常用的方法

常用的数据脱敏方法包括:

  • 随机化:通过将敏感数据替换为随机值或者伪随机值,保护原始数据的真实性。例如,将姓名替换为随机字符串;

  • 掩码:通过将敏感数据的一部分替换为掩码,隐藏部分敏感信息。例如,将电话号码的后四位替换为星号;

  • 加密:通过对敏感数据进行加密,保护数据的机密性。例如,对信用卡号码进行加密;

  • 截断:通过截断敏感数据的一部分或全部,限制访问敏感信息的范围。例如,只显示姓名的首字母;

  • 数据分区:将敏感数据分成多个区域,在不同的区域应用不同的脱敏技术,保护数据的隐私和机密性;

  • 虚拟化:在测试和开发环境中使用虚拟数据代替真实数据,虚拟数据可以是随机生成的、采样的或者是经过脱敏处理的;

  • 数据屏蔽:通过定义数据访问权限、角色和规则,限制用户访问敏感数据的范围和权限,保护数据的机密性和完整性;

  • 数据分类:将数据按照敏感程度分类,对不同级别的数据采用不同的脱敏技术和措施,保障数据的安全性。

数据脱敏需要注意哪些事项

在进行数据脱敏时,需要注意以下事项:

  • 数据完整性:数据脱敏可能会修改或删除原始数据,影响数据的完整性。因此,在进行数据脱敏时,需要确保脱敏操作不会影响数据的完整性和准确性;

  • 数据可用性:数据脱敏可能会使原始数据不可用,影响数据的可用性。因此,在进行数据脱敏时,需要确保脱敏操作不会影响数据的可用性和访问性;

  • 数据安全性:在进行数据脱敏时,需要注意保护脱敏过程中使用的算法、密钥和工具,以防止数据泄露和被攻击;

  • 脱敏方法的适用性:不同的脱敏方法适用于不同类型的数据和场景。在选择脱敏方法时,需要考虑数据类型、敏感程度和使用场景等因素,以确保脱敏方法的适用性和有效性;

  • 法规和合规要求:一些国家和地区的法规和合规要求对敏感数据进行保护和脱敏。在进行数据脱敏时,需要遵守当地的法规和合规要求。

desensitization简介

desensitization是基于Java反射api、零依赖、简单易用、支持各种复杂数据结构的数据脱敏库,包含但不限于以下类型的数据脱敏:

  • 邮箱

  • 手机号码

  • 中文名称

  • 身份证号码

  • 银行卡号码

  • 密码

  • 统一社会信用代码

  • 任意CharSequence类型的值

  • 级联脱敏

2.代码工程

实验目标

通过desensitization包实现对敏感数据脱敏处理

pom.xml

<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-demoartifactId>        <groupId>com.etgroupId>        <version>1.0-SNAPSHOTversion>    parent>    <modelVersion>4.0.0modelVersion>
<artifactId>desensitizationartifactId>
<properties> <maven.compiler.source>8maven.compiler.source> <maven.compiler.target>8maven.compiler.target> properties> <dependencies> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> dependency>
<dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-autoconfigureartifactId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-testartifactId> <scope>testscope> dependency> <dependency> <groupId>red.zycgroupId> <artifactId>desensitizationartifactId> <version>2.4.3version> 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;
@RestControllerpublic 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.测试

  1. 启动Spring Boot应用

  2. 访问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":"*********"}

4.引用

  • http://www.liuhaihua.cn/archives/711093.html

请使用浏览器的分享功能分享到微信等