方案一:

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 数据脱敏代码实现的更多相关文章

  1. java 数据脱敏

    所谓数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份 ...

  2. 如何用java实现数据脱敏

    数据脱敏是什么意思呢? 数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并 ...

  3. Springboot 配置文件、隐私数据脱敏的最佳实践(原理+源码)

    大家好!我是小富- 这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号.密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小. 说起这 ...

  4. 利用Jackson序列化实现数据脱敏

    几天前使用了Jackson对数据的自定义序列化.突发灵感,利用此方法来简单实现接口返回数据脱敏,故写此文记录. 核心思想是利用Jackson的StdSerializer,@JsonSerialize, ...

  5. 数据脱敏 t-closeness介绍与实现

    数据脱敏 t-closeness介绍与实现 本文主要基于t-closeness的首次提出团队Ninghui Li, Tiancheng Li, Suresh Venkatasubramanian发表的 ...

  6. ShardingJdbc-分表;分库;分库分表;读写分离;一主多从+分表;一主多从+分库分表;公共表;数据脱敏;分布式事务

    目录 创建项目 分表 导包 表结构 Yml 分库 Yml Java 分库分表 数据库 Yml 读写分离 数据库 Yml 其他 只请求主库 读写分离判断逻辑代码 一主多从+分表 Yml 一主多从+分库分 ...

  7. 【转】 BSS段 数据段 代码段 堆栈 指针 vs 引用

    原文:http://blog.csdn.net/godspirits/article/details/2953721 BSS段 数据段 代码段 堆栈 (转+) 声明:大部分来自于维基百科,自由的百科全 ...

  8. Android清除本地数据缓存代码案例

    Android清除本地数据缓存代码案例 直接上代码: /*  * 文 件 名:  DataCleanManager.java  * 描    述:  主要功能有清除内/外缓存,清除数据库,清除shar ...

  9. 转载-使用 Feed4JUnit 进行数据与代码分离的 Java 单元测试

    JUnit 是被广泛应用的 Java 单元测试框架,但是它没有很好的提供参数化测试的支持,很多测试人员不得不把测试数据写在程序里或者通过其它方法实现数据与代码的分离,在后续的修改和维护上有诸多限制和不 ...

随机推荐

  1. 160815、mysql主从复制/读写分离

    mysql主从复制主服务器IP:192.168.99.10从服务器IP:192.168.99.20(一)安装mysql(主从服务器操作相同)yum -y install gcc gcc-c++ ncu ...

  2. oracle 实现多字段匹配一个关键字查询语句

    oracle 实现多字段匹配一个关键字查询语句:有两种方法(经测试,10g中不能用,11g才行): 第一种. select * from table where ('字段名1' ||'字段名2' || ...

  3. POJ 1423 Greatest Common Increasing Subsequence【裸LCIS】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1423 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  4. 传说中的MATLAB1.0(1984年DOS界面182K、运行良好)附下载

    传说中的MATLAB1.0(1984年DOS界面182K.运行良好)附下载 你见过 MATLAB 最早的版本吗?下载一份 MATLAB 1.0,(只有182K, 只有20来个函数) 体会一下吧.MAT ...

  5. python得到一个10位随机数的方法及拓展

    https://blog.csdn.net/qq_33324608/article/details/78866760 无意中看到一个写10位随机数的方法,很有想法,然后就从学了一下随机数,相关东西都记 ...

  6. Java 之继承和 final 关键字

    继承的概述 继承的特点 super 关键字 函数覆盖 子类的实例化过程 final 关键字 1. 继承的概述 继承是类与类之间的关系. 继承的好处: 提高了代码的复用性 让类与类之间产生了关系, 给第 ...

  7. 这些Python骚操作,你知道吗?

    0x00 世界,你好 ​程序员第一次接触语言或者框架,基本上都有个 Hello World 的例子,这里 Python 直接将它做成了一个包. 0x01 Python 哲学 ​ Python 执行 i ...

  8. Vue(4)- 获取原生的DOM的方式、DIY脚手架、vue-cli的使用

    一.获取原生的DOM的方式 在js中,我们可以通过id.class或者标签获取DOM元素,vue中也为我们提供了获取原生DOM的方法,就是给标签或者组件添加ref属性,通过this.$refs获取,如 ...

  9. struts2的HelloWorld的基本过程

    login.jsp中 <form action="Login"... 该页面提交后, web.xml中设置的过滤器会起作用     <filter>        ...

  10. linux下Tomcat shutdown无效

    问题: linux下Tomcat shutdown无效 linux下关闭tomcat后,发现重新启动Tomcat后.port号提示被占用, 原因: 这时可能是项目中的后台线程或者socket依旧在执行 ...