zoukankan      html  css  js  c++  java
  • .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() > 0)
                {
                    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(0, 1);
    
    
                return familyName.PadRight(fullName.Length - 1, '*');
            }
    
            /// <summary>
            /// 证件号码敏感处理
            /// </summary>
            /// <param name="idNumber"></param>
            /// <returns></returns>
            public static string GetSensitiveIdNumber(string idNumber)
            {if (string.IsNullOrEmpty(idNumber))
                {
                    return "";
                }
    
                string number = idNumber.Substring(0, 6);
    
                return number.PadRight(idNumber.Length - 6, '*');
            }

    在第一个方法中的类型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方法中写逻辑。

    方案二:

    优点:方法简单,各司其职

    缺点:性能不高。

    最终我们选择的方案一,希望有高手指点。

  • 相关阅读:
    JS高级知识部分【4】
    关于python3 使用pycharm+unittest+html+HTMLTestRunner 测试用例运行正常,但却不能生成测试报告的解决方法
    python生成HTMl报告(unittest)
    Linux系统下安装jenkins使用
    jenkins使用
    UI定位元素大全(跟App定位元素差不多哦)
    UI自动化前置代码
    python+selenium+pytest+html报告
    jenkins解决python不是内部命令
    如何做好APP功能测试?
  • 原文地址:https://www.cnblogs.com/hankuikui/p/6484194.html
Copyright © 2011-2022 走看看