当前位置: 首页 > news >正文

Spring Boot如何实现数据脱敏?

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;@ChineseNameSensitiveprivate String name;@IdCardNumberSensitiveprivate String idCard;@PhoneNumberSensitiveprivate String tel;@EmailSensitiveprivate String email;@PasswordSensitiveprivate 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;}@Overridepublic String toString() {return "Teacher{" +"id=" + id +", name='" + name + '\'' +", idCard='" + idCard + '\'' +", tel='" + tel + '\'' +", email='" + email + '\'' +", password='" + password + '\'' +'}';}
}

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • GitHub - Harries/springboot-demo: a simple springboot demo with some components for example: redis,solr,rockmq and so on.(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.引用

  • Spring Boot如何实现数据脱敏? | Harries Blog™

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 在Spring Boot中使用MyBatis实现复杂查询和分页功能
  • Java基础之循环嵌套
  • K8S学习笔记(自用,不定期更新)
  • Docker-命令
  • Tomcat初篇
  • Java 网络编程练习
  • 新天龙八部3江山策仿官方+单机联网+GM工具
  • 【抓包】- Fiddler抓包教程,使用Fiddle抓取B站视频;ffmpeg的使用方法
  • Eureka入门指南:微服务注册与发现的基础概念
  • 软件开发感悟
  • go注册到eureka微服务
  • 构建AI知识库:4大优势+无限可能,共绘在线教育蓝图!
  • 【代码随想录算法训练营第42期 第七天 | LeetCode454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和】
  • 【Python快速入门和实践012】Python常用脚本-目标检测之查看数据集标签类别及对应数量
  • Python爬虫使用实例
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 77. Combinations
  • Angular 4.x 动态创建组件
  • CAP理论的例子讲解
  • Cumulo 的 ClojureScript 模块已经成型
  • Js基础知识(四) - js运行原理与机制
  • js写一个简单的选项卡
  • linux学习笔记
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • MySQL的数据类型
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 阿里云应用高可用服务公测发布
  • 回流、重绘及其优化
  • 基于遗传算法的优化问题求解
  • 基于组件的设计工作流与界面抽象
  • 警报:线上事故之CountDownLatch的威力
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 微信小程序设置上一页数据
  • 一些关于Rust在2019年的思考
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​插件化DPI在商用WIFI中的价值
  • # .NET Framework中使用命名管道进行进程间通信
  • # centos7下FFmpeg环境部署记录
  • #、%和$符号在OGNL表达式中经常出现
  • #nginx配置案例
  • #pragma data_seg 共享数据区(转)
  • $GOPATH/go.mod exists but should not goland
  • (12)Hive调优——count distinct去重优化
  • (2015)JS ES6 必知的十个 特性
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (理论篇)httpmoudle和httphandler一览
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks