聊一下数据脱敏

news2024/12/26 14:06:39

背景

随着信息社会高速发展,大家对隐私数据的安全越来越重视,现在市面上各种搜集个人信息的网站,app层出不穷,你也不知道你的信息提交上去后,提供服务的那边,是不是会妥善保管好你的个人数据,包括但不限于,身份证号,手机号,各种卡号等等。

不久前诈骗犯猖獗的时候,绝大部分就是因为你的隐私数据泄露,造成的安全风险。所以作为用户和消费者,遇到平时填写个人信息的场景,一定要慎重。

那作为负责任的服务提供商,也应该做的妥善保管用户的隐私信息,这是互信的基础。

法律法规

当然,到今天为止,隐私数据的保护,不仅仅是企业责任,更是法律要求,目前我国出台的涉及到个人隐私信息保护的法律包括但不限于:

  1. 《中华人民共和国个人信息保护法》:这部法律于2021年11月1日正式实施,是我国第一部专门针对个人信息保护的法律,旨在保护个人信息权益,规范个人信息处理活动,保障个人隐私不受侵犯。
  2. 《中华人民共和国民法典》:在人格权编中有明确规定隐私权和个人信息保护的内容,尤其是在第四编第六章中详细描述了隐私权和个人信息保护的相关规定。
  3. 《中华人民共和国网络安全法》:该法于2017年6月1日开始实施,是关于网络安全的基础性法律,对于个人信息的安全保护也有所涉及。
  4. 《中华人民共和国数据安全法》:此法进一步强化了数据安全管理,保护数据安全,促进数据开发利用。

所以,作为系统服务的提供者,做好用户个人隐私数据的保护责无旁贷。

保护形式

数据脱敏处理,一般来说有2种形式。

不可逆脱敏

当用户提交个人信息后,筛选出其敏感字段,如身份证号码,手机号,银行卡号等,进行不可逆的加密,比如截断前几位和后几位,中间部分直接替成星号之类的符号,也可以直接把整个字段用一些摘要算法生成哈希值,反正是不可逆的,怎么简单怎么来。

这样做虽然简单,高效,但劣势也很明显,当我们真的需要联系,或者在某些紧急情况需要查看用户信息时,就不好处理了。

可逆脱敏

可逆的方式就是再保存信息是,多一步操作,将用户提交的敏感信息,进行加密,加密方式可以根据实际情况,采用对称或者非对称加密方式,总之是有办法查看原始数据的。

*可逆还安全吗?

既然可逆,那还安全吗?

当然是安全的,首先,用户的数据是以安全的方式进行存储的,即便是采用可逆脱敏的方式,解密的密钥一定是由用户自己保管。而且,即使要执行查看敏感数据的操作,也是需要一定的权限或者授权操作,比如发送验证码等。不是谁想看就可以看的,当然要做到这点也是需要企业遵守契约精神。

那如果有企业说,既然能解密,我不想那么麻烦,还要等验证码,还要用户授权,还要经过怎么怎么样的流程,太耽误时间了,一把梭直接明文不是更好。请参考上面👆提到的几部法律,一旦被查实,罚款通报都是从轻发落了。

总之,涉及用户敏感信息的环节,进行数据脱敏的操作,不是自寻烦恼,而是必要的保护性措施,即便是增加了一定的管理复杂度,也是必须要付出的代价。

其实还有一种脱敏方式,就是伪脱敏,简单来说就是,用户数据什么的都是明文一把梭,只在UI层做了点字符替换之类的操作,糊弄用户。这种行为,要么是不会,要么就是懒,无它。

脱敏流程

站在整个系统角度,脱敏流程大概如下图所示,在系统中流转的数据,一旦涉及到敏感字段,都需要经过脱敏操作,才能进行后续业务。

画板

而单独看脱敏操作这个环节,又可以分为几种情况

  1. 如果操作管理系统的是系统级管理员,拥有很高的管理权限,也就有查看用户敏感信息的权限,这种,可以根据实际情况,放宽查看用户解密密钥的权限。获取到解密密钥后,可以查看用户敏感数据。当然所有的操作必须要有日志记录。
  2. 如果是普通管理人员,只负责某些业务,有需要用到用户敏感信息的情况,这种一般的处理结果是做到“可用不可见”的效果,比如服务提供方需要给用户发送短信,就必须要知道用户的手机号码,而服务端是可以识别这种场景,在服务端完成解密敏感信息,并发送短信的动作,而无需把手机号展示在ui层。
  3. 如果是用户自己在用户端系统上查看个人敏感数据,一般完成基本的认证就可以了,比如验证码,人脸识别等手段都是ok的。

总结起来,流程基本如下

画板

样例代码

我这里是在模型层创建了一个中间层,专门处理敏感数据

public class MaskDataDto()
{
    public string text { get; set; }

    public MaskDataType maskDataType { get; set; }

    public uint firstPoint
    {
        get
        {
            if (maskDataType == MaskDataType.ChinaCellPhone)
                return 3;
            if (maskDataType == MaskDataType.ChinaIdCard)
                return 4;
            return Convert.ToUInt32(Math.Ceiling(Convert.ToDouble(text.Length) / 3));
        }
        set { }
    }

    public uint lastPoint {
        get
        {
            if (maskDataType == MaskDataType.ChinaCellPhone)
                return 7;
            if (maskDataType == MaskDataType.ChinaIdCard)
                return 14;
            return Convert.ToUInt32(Math.Ceiling(Convert.ToDouble(text.Length) / 1.5));
        }
        set { }
    }

    //用户专属id
    public string keyId { get; set; }
    //用户专属secret
    public string keySecret { get; set; }

    public bool valid
    {
        get
        {
            if (string.IsNullOrEmpty(keyId) || string.IsNullOrEmpty(keySecret))
                return false;

            if (maskDataType == MaskDataType.ChinaCellPhone && text.Length != 11)
                return false;

            if (maskDataType == MaskDataType.ChinaIdCard && !Assistant.IdCardValidator.IsValidIdCard(text))
                return false;

            if (firstPoint>=text.Length || firstPoint>lastPoint || lastPoint>=text.Length || lastPoint==0)
                return false;

            return true;
        }
    }

    public string encryptText
    {
        get
        {
            //解码的时候,要先转回普通字符,在解码
            return Assistant.Utils.ToBase64Str(Assistant.Security.Encrypt(text, Encoding.UTF8.GetBytes(keyId), Encoding.UTF8.GetBytes(keySecret)));
        }
        //get;set;
    }
   // public string[]? splitTexts { get; set; }
    public string[]? splitTexts
    {
        get
        {
            var textParts = new List<string>()
                {
                    text.Substring(0, (int)firstPoint),
                    text.Substring((int)lastPoint, text.Length - (int)lastPoint)
                };
            return textParts.ToArray();
        }
    }

    public string hashText
    {
        get
        {
            return Security.GenerateMD5Hash(text);
        }
    }

}
public IActionResult TestMaskData(string text)
{
    var maskData = new MaskDataDto()
    {
        text = text,
        keyId = Utils.GenerateRandomCodePro(16),
        keySecret = Utils.GenerateRandomCodePro(16),
        maskDataType = MaskDataType.Other
    };
    Console.WriteLine($"TestMaskData: {JsonHelper.JsonSerialize(maskData)}");
    return Ok();
}

代码在实例化阶段,就会分别返回密文,哈希和一个分段的数组。密文就是加密后的敏感数据,哈希值是为了方便检索操作,接受的数据可以直接是哈希值,解决了传输层的安全问题,至于分段的数组,是保存的敏感数据的前缀和后缀,在需要显示敏感字段的地方,返回前缀,后缀以及遮掩字符拼接的安全信息,也能方便检索。

效果

简单看几个脱敏成果

  • 控制台打印的服务端脱敏效果
    在这里插入图片描述

  • 存储效果

  • 页面效果

  • 传输效果

  • 高级管理员的解密效果

这里有一些权限识别,动作识别之类动作的无法展示,只能大概看一下几个场景的截图。

好了,基本就是这样了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2180432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python和MATLAB库尔巴克–莱布勒散度信息论统计学生物学和算法模型

&#x1f3af;要点 高斯混合模型聚类和t分布随机邻域嵌入底层分析信息论测量复合彩票统计学计算结果离散分布速率最优估计器样本统计相似性快速闭环散度和交叉熵计算催乳素诱导模型贝叶斯快速推理模型视觉皮层活动神经数据分布 Python散度 在数理统计中&#xff0c;库尔巴克…

悬浮提词器免费版,5款便捷软件分享推荐

在这个信息爆炸、内容为王的时代&#xff0c;无论是直播带货、视频创作还是公开演讲&#xff0c;流畅自然的表达都是吸引观众的关键。然而&#xff0c;面对镜头时忘词卡顿却成了不少人的“心头痛”。今天&#xff0c;就给大家揭秘五款完全免费的悬浮提词器软件&#xff0c;它们…

初学51单片机之I2C总线与E2PROM二

总结下上篇博文的结论&#xff1a; 1&#xff1a;ACK信号在SCL为高电平期间会一直保持。 2&#xff1a;在字节数据传输过程中如果发送电平跳变&#xff0c;那么电平信号就会变成重复起始或者结束的信号。&#xff08;上篇博文的测试方法还是不能够明确证明这个结论&#xff0…

GWAS分析中显著位点如何注释基因:excel???

大家好&#xff0c;我是邓飞。 今天星球的小伙伴问了一个问题&#xff1a; 我现在在做GWAS分析&#xff0c;现在已经找到性状关联的SNP位点&#xff0c;下一步我如何根据position 找到基因呢&#xff1f; 关于基因注释&#xff0c;之前写过一些博客&#xff0c;可以用到的软件…

mono.cecil实现动态插入IL代码

准备 namespace ConsoleApp1 {internal class Program{static void Main(string[] args){Console.WriteLine("Hello, World!");Console.ReadKey();}} }编译出来如下内容 使用ilspy打开 代码 安装Mono.Cecil包 代码如下 using Mono.Cecil; using Mono.Cecil.Ci…

云计算Openstack Neutron

OpenStack Neutron是OpenStack云计算平台中的网络服务组件&#xff0c;它为OpenStack提供了强大的网络连接功能。 一、基本概念 Neutron是一个网络服务项目&#xff0c;旨在为OpenStack提供网络连接。它允许用户创建和管理虚拟网络&#xff0c;包括子网、路由、安全组等&…

Arweave的出块原理

一、Arweave 关键技术 1.1数据结构&#xff1a;Blockweave 区块纺 区块坊中包括区块哈希列表和钱包列表。拥有区块哈希列表使旧区块可以被请求/验证&#xff0c;拥有钱包列表可以验证新交易&#xff0c;而无需处理钱包上一次交易所在的区块。区块哈希列表和钱包列表由矿工保持…

【最新华为OD机试E卷-支持在线评测】字符串分割转换(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

基于大数据的电脑硬件推荐及数据分析系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

基于卷积神经网络的体育运动项目分类识别系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 随着计算机视觉和深度学习技术的快速发展&#xff0c;利用先进的图像处理技术对体育运动进行智能分类与识别已成为研究热点。传统的运动分析方法通常依赖于人工观察和记录&#xff0c;耗时耗力且容…

fatfs API使用手册

配置 /*---------------------------------------------------------------------------/ / Configurations of FatFs Module /---------------------------------------------------------------------------*/#define FFCONF_DEF 80286 /* Revision ID *//*---------------…

JWT(JSON Web Token)的介绍

JSON Web Token&#xff08;缩写 JWT&#xff09;是目前最流行的跨域认证解决方案&#xff0c;本文介绍它的原理和用法。 一、跨域认证的问题 互联网服务离不开用户认证。一般流程是下面这样。 1、用户向服务器发送用户名和密码。 2、服务器验证通过后&#xff0c;在当前对话&…

如何组织鼠标的默认的事件

如何组织鼠标的默认的事件 我原先的代码是 dblclick"checkNode(data)"设置了一个双击的事件&#xff0c;我如果双击的话就会导致这个内容被选中。 选中内容的同时会触发浏览器默认的操作&#xff0c;导致出现复制的框这些东西。 解决的方法。加一句。 mousedown.pr…

尝鲜使用 YOLO V11 Fine-Tuning 训练自定义的目标检测模型

一、YOLO V11 2024年9月30日&#xff0c;Ultralytics官方团队宣布YOLOv11正式发布&#xff0c;标志着YOLO系列实时目标检测器的又一次重大升级。这一新版本不仅在准确性和检测速度上再创新高&#xff0c;还通过架构和训练方法的革新&#xff0c;极大地提升了目标检测的综合性能…

算法打卡:第十一章 图论part11

今日收获&#xff1a;Floyd 算法&#xff0c;A * 算法&#xff0c;最短路算法总结 1. Floyd 算法 题目链接&#xff1a;97. 小明逛公园 思路&#xff1a;Floyd用于解决多源最短路问题&#xff0c;对边的正负权值没有要求。核心是动态规划 &#xff08;1&#xff09;dp数组的…

Stable Diffusion的Lora使用和训练 如何使用和训练LoRA模型?你想要的都在这!--人人都可以当炼金术士!

随着人工智能技术的不断发展&#xff0c;图像生成与反推技术已经成为了AI领域的一大热点。今天&#xff0c;我们就来为大家详细介绍Stable Diffusion的Lora使用和训练方法&#xff0c;让每个人都能成为炼金术士&#xff0c;创造出属于自己的图像生成魔法&#xff01; 在我们使…

108.WEB渗透测试-信息收集-FOFA语法(8)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;107.WEB渗透测试-信息收集-FOFA语法&#xff08;7&#xff09; 指挥系统的后台&#xff…

把GV幅度还不赶紧地方吧

文章目录 标题1代码 标题1 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</titl…

pve虚拟机常见问题汇总

一、问题记录 当你遇到 Proxmox VE (PVE) 报错信息 “TASK ERROR: can’t lock file ‘/var/lock/qemu-server/lock-141.conf’ - got timeout”&#xff0c;通常意味着 PVE 尝试对一个虚拟机进行操作&#xff08;如停止或重启&#xff09;时&#xff0c;无法获取必要的锁文件&…

项目管理系统如何实现项目申报流程自动化?

传统的项目申报流程往往繁琐复杂&#xff0c;涉及众多环节和部门间的协作&#xff0c;不仅耗时费力&#xff0c;还容易因人为疏忽而导致错误或延误。随着信息技术的飞速发展&#xff0c;项目管理系统的出现为项目申报流程的自动化提供了可能&#xff0c;极大地提升了申报效率和…