.net 数据脱敏代码实现
方案一:
DTO中处理:
private string idNumber;
/// <summary>
/// 身份证号码
/// </summary>
[Column("id_number")]
public string IdNumber
{
get { return idNumber; }
set { idNumber = SensitiveHelper.GetIdNumber(value); }
}
方案二:
业务层处理:
核心方法如下:
/// <summary>
/// 根据输入参数T中的特性,对属性进行敏感数据处理
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <returns></returns>
public static List<T> GetSensitiveResult<T>(List<T> source)
{
if (!SysConfigHelper.Instance.GetBool("Para"))
{
return source;
} List<PropertyInfo> props = GetPropertyInfos<SensitiveAttribute>(typeof(T)); if (props.Count() > )
{
source.ForEach(r =>
{
foreach (var prop in props)
{
var p = prop.GetCustomAttributes(true).OfType<SensitiveAttribute>().FirstOrDefault();
var accesor = new PropertyAccessor(typeof(T), prop.Name);
var value = accesor.Get(r)?.ToString(); switch (p.SensitiveType)
{
case SensitiveType.IdNumber:
accesor.Set(r, GetSensitiveIdNumber(value));
break;
case SensitiveType.Name:
accesor.Set(r, GetSensitiveName(value));
break;
default:
break;
}
} });
}
return source;
} /// <summary>
/// 姓名敏感处理
/// </summary>
/// <param name="fullName"></param>
/// <returns></returns>
public static string GetSensitiveName(string fullName)
{if (string.IsNullOrEmpty(fullName))
{
return "";
} string familyName = fullName.Substring(, ); return familyName.PadRight(fullName.Length - , '*');
} /// <summary>
/// 证件号码敏感处理
/// </summary>
/// <param name="idNumber"></param>
/// <returns></returns>
public static string GetSensitiveIdNumber(string idNumber)
{if (string.IsNullOrEmpty(idNumber))
{
return "";
} string number = idNumber.Substring(, ); return number.PadRight(idNumber.Length - , '*');
}
在第一个方法中的类型T中,需要对要敏感处理的属性增加特性Attribute
public class SensitiveAttribute: Attribute
{
#region Fields
public SensitiveType SensitiveType { get; set; }
#endregion #region Constructors and Destructors public SensitiveAttribute()
{ } public SensitiveAttribute(SensitiveType type)
{
this.SensitiveType = type;
}
#endregion #region Public Methods and Operators #endregion
} public enum SensitiveType
{
Name,
IdNumber
}
在DTO中使用:
[Sensitive(SensitiveType.Name)]
public string BillPatientName { get; set; }
两个方案各有利弊:
方案一:
优点:性能最好,不需要再循环对数据进行处理。
缺点:不推荐在DTO中的get,set方法中写逻辑。
方案二:
优点:方法简单,各司其职
缺点:性能不高。
最终我们选择的方案一,希望有高手指点。
.net 数据脱敏代码实现的更多相关文章
- java 数据脱敏
所谓数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份 ...
- 如何用java实现数据脱敏
数据脱敏是什么意思呢? 数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并 ...
- Springboot 配置文件、隐私数据脱敏的最佳实践(原理+源码)
大家好!我是小富- 这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号.密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小. 说起这 ...
- 利用Jackson序列化实现数据脱敏
几天前使用了Jackson对数据的自定义序列化.突发灵感,利用此方法来简单实现接口返回数据脱敏,故写此文记录. 核心思想是利用Jackson的StdSerializer,@JsonSerialize, ...
- 数据脱敏 t-closeness介绍与实现
数据脱敏 t-closeness介绍与实现 本文主要基于t-closeness的首次提出团队Ninghui Li, Tiancheng Li, Suresh Venkatasubramanian发表的 ...
- ShardingJdbc-分表;分库;分库分表;读写分离;一主多从+分表;一主多从+分库分表;公共表;数据脱敏;分布式事务
目录 创建项目 分表 导包 表结构 Yml 分库 Yml Java 分库分表 数据库 Yml 读写分离 数据库 Yml 其他 只请求主库 读写分离判断逻辑代码 一主多从+分表 Yml 一主多从+分库分 ...
- 【转】 BSS段 数据段 代码段 堆栈 指针 vs 引用
原文:http://blog.csdn.net/godspirits/article/details/2953721 BSS段 数据段 代码段 堆栈 (转+) 声明:大部分来自于维基百科,自由的百科全 ...
- Android清除本地数据缓存代码案例
Android清除本地数据缓存代码案例 直接上代码: /* * 文 件 名: DataCleanManager.java * 描 述: 主要功能有清除内/外缓存,清除数据库,清除shar ...
- 转载-使用 Feed4JUnit 进行数据与代码分离的 Java 单元测试
JUnit 是被广泛应用的 Java 单元测试框架,但是它没有很好的提供参数化测试的支持,很多测试人员不得不把测试数据写在程序里或者通过其它方法实现数据与代码的分离,在后续的修改和维护上有诸多限制和不 ...
随机推荐
- windows平台 - 0基础学习node.js(一)
首先得明白node.js做什么用的: 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Nod ...
- ActiveMQ+SpringMVC+Maven应用示例
本文主要想通过一个WEB示例展示ActiveMQ在具体应用程序中是如何使用的,顺便简单介绍以下如何通过Eclipse搭建一个SpringMVC框架和Maven项目开发框架.下面首先展示一下项目最终的运 ...
- webpack 构建项目入门
参考http://www.cnblogs.com/eyunhua/p/6398885.html ---------------------------------------------------- ...
- iOS 数组containsObject:方法
今年上半年打算巩固一下基础知识,将工作和学习中遇到的疑惑尽量搞清楚原理.作为一个菜鸟级别的程序员,我深深的体会到算法和基础的重要性,如果说算法是内功,那么基础就是下盘,只有下盘稳住了,上面才不会轻易倒 ...
- 详解Bootstrap下拉菜单组件
bootstrap框架中的下拉菜单组件是一个独立的组件,根据不同的版本,他对应的文件: less 对应的源码文件为:dropdowns.less sass对应的源码文件为:_dropdowns.scs ...
- OVN实战---《A Primer on OVN》翻译
overview 在本文中,我们将在三个host之间创建一个简单的二层overlay network.首先,我们来简单看一下,整个系统是怎么工作的.OVN基于分布式的control plane,其中各 ...
- Andrew Ng机器学习编程作业:K-means Clustering and Principal Component Analysis
作业文件 machine-learning-ex7 1. K-means聚类 在这节练习中,我们将实现K-means聚类,并将其应用到图片压缩上.我们首先 从二维数据开始,获得一个直观的感受K-mea ...
- android自定义控件(一)MeasureSpec 与 ListView.onMeasure
A MeasureSpec encapsulates the layout requirements passed from parent to child. Each MeasureSpec rep ...
- GTID的主从复制的配置
主库配置: (一).修改配置文件:在my.cnf配置文件中开启如下选项. [mysqld] #GTID: gtid_mode=on enforce_gtid_consistency=on server ...
- 初识JS 基本语法.基本运算符
JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.( ...