还是老惯例,直接上代码。

最终效果图:

    public static class HideSensitiveInfoExtension
{
/// <summary>
/// 隐藏敏感信息
/// </summary>
/// <param name="info">信息实体</param>
/// <param name="left">左边保留的字符数</param>
/// <param name="right">右边保留的字符数</param>
/// <param name="basedOnLeft">当长度异常时,是否显示左边 </param>
/// <returns></returns>
public static string HideSensitiveInfo(this string info, int left, int right, bool basedOnLeft = true)
{
if (String.IsNullOrEmpty(info))
{
return "";
}
StringBuilder sbText = new StringBuilder();
int hiddenCharCount = info.Length - left - right;
if (hiddenCharCount > 0)
{
string prefix = info.Substring(0, left), suffix = info.Substring(info.Length - right);
sbText.Append(prefix);
for (int i = 0; i < hiddenCharCount; i++)
{
sbText.Append("*");
}
sbText.Append(suffix);
}
else
{
if (basedOnLeft)
{
if (info.Length > left && left > 0)
{
sbText.Append(info.Substring(0, left) + "****");
}
else
{
sbText.Append(info.Substring(0, 1) + "****");
}
}
else
{
if (info.Length > right && right > 0)
{
sbText.Append("****" + info.Substring(info.Length - right));
}
else
{
sbText.Append("****" + info.Substring(info.Length - 1));
}
}
}
return sbText.ToString();
} /// <summary>
/// 隐藏敏感信息
/// </summary>
/// <param name="info">信息</param>
/// <param name="sublen">信息总长与左子串(或右子串)的比例</param>
/// <param name="basedOnLeft">当长度异常时,是否显示左边,默认true,默认显示左边</param>
/// <code>true</code>显示左边,<code>false</code>显示右边
/// <returns></returns>
public static string HideSensitiveInfo(this string info, int sublen = 3, bool basedOnLeft = true)
{
if (String.IsNullOrEmpty(info))
{
return "";
}
if (sublen <= 1)
{
sublen = 3;
}
int subLength = info.Length / sublen;
if (subLength > 0 && info.Length > (subLength * 2))
{
string prefix = info.Substring(0, subLength), suffix = info.Substring(info.Length - subLength);
return prefix + "****" + suffix;
}
else
{
if (basedOnLeft)
{
string prefix = subLength > 0 ? info.Substring(0, subLength) : info.Substring(0, 1);
return prefix + "****";
}
else
{
string suffix = subLength > 0 ? info.Substring(info.Length - subLength) : info.Substring(info.Length - 1);
return "****" + suffix;
}
}
} /// <summary>
/// 隐藏邮件详情
/// </summary>
/// <param name="email">邮件地址</param>
/// <param name="left">邮件头保留字符个数,默认值设置为3</param>
/// <returns></returns>
public static string HideEmailDetails(this string email, int left = 3)
{
if (String.IsNullOrEmpty(email))
{
return "";
}
if (System.Text.RegularExpressions.Regex.IsMatch(email, @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"))//如果是邮件地址
{
int suffixLen = email.Length - email.LastIndexOf('@');
return HideSensitiveInfo(email, left, suffixLen, false);
}
else
{
return HideSensitiveInfo(email);
}
}
}

C#实现隐藏手机号、邮箱、姓名等敏感信息扩展方法的更多相关文章

  1. Linux提权后获取敏感信息的方法与途径

    在本文开始之前,我想指出我不是专家.据我所知,在这个庞大的区域,没有一个“神奇”的答案.分享,共享(我的出发点).下面是一个混合的命令做同样的事情,在不同的地方,或只是一个不同的眼光来看待事物.我知道 ...

  2. LINUX提权后获取敏感信息之方法

    文中的每行为一条命令,文中有的命令可能在你的主机上敲不出来,因为它可能是在其他版本的linux中所使用的命令. 列举关键点 (Linux)的提权是怎么一回事:  收集 – 枚举,枚举和一些更多的枚举. ...

  3. 隐藏Apache版本号及版本敏感信息

    在安装软件前,我们需要隐藏软件的版本号及版本其他信息,这样就大大提高了安全指数. 只隐藏版本号: 我们在主配置文件里:httpd.conf [root@bqh- ~]# curl -i bbs.bqh ...

  4. 血淋淋的事实告诉你:你为什么不应该在JS文件中保存敏感信息

    在JavaScript文件中存储敏感数据,不仅是一种错误的实践方式,而且还是一种非常危险的行为,长期以来大家都知道这一点. 而原因也非常简单,我们可以假设你为你的用户动态生成了一个包含API密钥的Ja ...

  5. DotNet隐藏敏感信息操作方法

    在项目中,有时候一些信息不便完全显示,只需要显示部分信息.现在提供一些隐藏敏感信息的操作方法,主要为对信息的截取操作: 1.指定左右字符数量,中间的*的个数和实际长度有关: /// <summa ...

  6. jsp隐藏关键 敏感信息,只显示前后字段

    今天写jsp页面,要求对字段中间部分隐藏,只显示前几位和后几位.搜了一下发现网上大都是隐藏前面指定字段,或者是利用正则表达式隐藏手机号或是身份证.这样的话必须预先知道字段长度,而我不想知道长度只显示前 ...

  7. Web应用程序的敏感信息-隐藏目录和文件

    Web应用程序的敏感信息-隐藏目录和文件 0x1.场景 Web应用程序根文件夹中可能存在大量隐藏信息:源代码版本系统文件夹和文件(.git,.gitignore,.svn),项目配置文件(.npmrc ...

  8. Freemaker隐藏手机号和判断长度

    Freemaker隐藏手机号,用一个取巧的方法. <#if con.phone??> ${con.phone?substring(0,3)}xxxx${con.phone?substrin ...

  9. Java隐藏手机号中间四位,隐藏身份证中间数字

    原文:https://blog.csdn.net/yuanquanl/article/details/53519577 public static void main(String[] args) { ...

随机推荐

  1. 一步一步学会preload和prefetch

    preload和prefetch是什么? 我们常说的preload和prefetch,是link标签rel里新增的两种值,用于让浏览器提前加载指定的资源,它们会先被缓存(属于http cache缓存) ...

  2. Sort Letters by Case

    Given a string which contains only letters. Sort it by lower case first and upper case second. Examp ...

  3. docker的网络服务

    docker提供 网络服务,主要通过两种方式: 1.外部访问 2.容器互联 通过外部访问Docker容器,主要通过端口映射的方式. [root@docker ~]# docker run -t -P ...

  4. 003转载----C#打开网页

    作者:微wx笑 来源:CSDN 原文:https://blog.csdn.net/testcs_dn/article/details/42246969 版权声明:本文为博主原创文章,转载请附上博文链接 ...

  5. 浅谈神经网络中的bias

    1.什么是bias? 偏置单元(bias unit),在有些资料里也称为偏置项(bias term)或者截距项(intercept term),它其实就是函数的截距,与线性方程 y=wx+b 中的 b ...

  6. LR性能测试课程及视频教程

    LR性能测试课程及视频教程课程如下: 1.性能测试核心技术-2.性能测试脚本开发-3.LR场景设计-4.LR指标分析. 1.性能测试是通过自动化的测试工具模拟多种正常.峰值以及异常负载条件来对系统的各 ...

  7. Harmonious Graph

    D. Harmonious Graph 好后悔在写这个题之前浪费了几分钟时间,不然我就写出来了.... 因为他就是连通块之间的合并问题,所以就用并查集就好了 复杂度好像也只是线性的吧... 然后就A了 ...

  8. EGL Driver message (Critical) eglInitialize: No available renderers.

    使用Python的selenium库进行自动化巡检.并将相对应的数据保存 环境: Windows Embedded Standard Python 2.7.16 selenium 3.141.0 [0 ...

  9. easyui的combobox模糊搜索

    <tr> <th>测试名称:</th> <td> <select data-options="" class="ea ...

  10. SQL连接查询基础知识点

    什么是连接 连接(join)查询是基于多个表中的关联字段将数据行拼接到一起,可以同时返回多个表中的数据. 下面以两个表为例子,举例说明一下不同的连接. SELECT * FROM products i ...