当前位置: 首页 > 编程笔记 >

C#隐藏手机号、邮箱等敏感信息的实现方法

柯升
2023-03-14
本文向大家介绍C#隐藏手机号、邮箱等敏感信息的实现方法,包括了C#隐藏手机号、邮箱等敏感信息的实现方法的使用技巧和注意事项,需要的朋友参考一下

Intro

做项目的时候,页面上有一些敏感信息,需要用“*”隐藏一些比较重要的信息,于是打算写一个通用的方法。

Let's do it !

Method 1:指定左右字符数量

Method 1.1 中间的*的个数和实际长度有关

/// <summary>
/// 隐藏敏感信息
/// </summary>
/// <param name="info">信息实体</param>
/// <param name="left">左边保留的字符数</param>
/// <param name="right">右边保留的字符数</param>
/// <param name="basedOnLeft">当长度异常时,是否显示左边 
/// <code>true</code>显示左边,<code>false</code>显示右边
/// </param>
/// <returns></returns>
public static string HideSensitiveInfo(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();
}

Method 1.2 : 中间的*的个数固定

/// <summary>
/// 隐藏敏感信息
/// </summary>
/// <param name="info">信息实体</param>
/// <param name="left">左边保留的字符数</param>
/// <param name="right">右边保留的字符数</param>
/// <param name="basedOnLeft">当长度异常时,是否显示左边 
/// <code>true</code>显示左边,<code>false</code>显示右边
/// <returns></returns>
public static string HideSensitiveInfo1(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);
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();
}

Method 2 : “*”数量一定,设置为4个,按信息总长度的比例来取,默认左右各取1/3

/// <summary>
/// 隐藏敏感信息
/// </summary>
/// <param name="info">信息</param>
/// <param name="sublen">信息总长与左子串(或右子串)的比例</param>
/// <param name="basedOnLeft">当长度异常时,是否显示左边,默认true,默认显示左边
/// <code>true</code>显示左边,<code>false</code>显示右边
/// <returns></returns>
public static string HideSensitiveInfo(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;
}
}
}

扩展

手机号 1

/// <summary>
/// 隐藏手机号详情
/// </summary>
/// <param name="phone">手机号</param>
/// <param name="left">左边保留字符数</param>
/// <param name="right">右边保留字符数</param>
/// <returns></returns>
public static string HideTelDetails(string phone, int left = 3, int right = 4)
{
return HideSensitiveInfo(phone, left, right);
}

测试结果如下:

手机号 2

/// <summary>
/// 隐藏手机号详情
/// </summary>
/// <param name="phone">手机号</param>
/// <param name="left">左边保留字符数</param>
/// <param name="right">右边保留字符数</param>
/// <returns></returns>
public static string HideTelDetails(string phone, int left = 3, int right = 4)
{
return HideSensitiveInfo1(phone, left, right);
}

测试结果如下:

邮件地址

/// <summary>
/// 隐藏右键详情
/// </summary>
/// <param name="email">邮件地址</param>
/// <param name="left">邮件头保留字符个数,默认值设置为3</param>
/// <returns></returns>
public static string HideEmailDetails(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#隐藏手机号、邮箱等敏感信息的实现方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 本文向大家介绍Django保护敏感信息的方法示例,包括了Django保护敏感信息的方法示例的使用技巧和注意事项,需要的朋友参考一下 Django在安全性上表现出色,但是在日常开发中难免会有没有注意到的地方,今天我们就讲一个非常有用的技巧。 千万不要在正式环境中设置DEBUG=True,除非你想跑路 sensitive_variables 众所周知Django的发生异常的时候会有错误信息,弄不好,不

  • 本文向大家介绍iOS正则表达式验证手机号、邮箱、身份证号等,包括了iOS正则表达式验证手机号、邮箱、身份证号等的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了常用的iOS正则表达式,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍Android 手机获取手机号实现方法,包括了Android 手机获取手机号实现方法的使用技巧和注意事项,需要的朋友参考一下 最近做到一个项目,需要获取手机号。项目中使用的手机卡为电信卡,那么就以此为例吧。 网上不符合需求的方法 Google了一下,网上的做法如下: 添加权限: <uses-permissionandroid:nameuses-permissionandroid:na

  • 本文向大家介绍python 实现敏感词过滤的方法,包括了python 实现敏感词过滤的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 测试结果: 1) 敏感词 100个 2) 敏感词 1000 个 从上面的实验我们可以看出,在DFA 算法只有在敏感词较多的情况下,才有意义。在百来个敏感词的情况下,甚至不如普通算法 下面从理论上推导时间复杂度,为了方便分析,首先假定消息文本是等长的,长度为

  • 本文向大家介绍jquery实现手机号码选号的方法,包括了jquery实现手机号码选号的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jquery实现手机号码选号的方法。分享给大家供大家参考。具体如下: 前段时间看到联通的自由组合套餐非常诱人于是决定换号,但选号是个非常累人的活在免费的号码列表中选了好久都没选到心仪的号码,于是写了个脚本去分析这些手机号码,虽然不是非常准确,但至少把那堆

  • 本文向大家介绍C#实现QQ邮箱发送邮件,包括了C#实现QQ邮箱发送邮件的使用技巧和注意事项,需要的朋友参考一下 闲着蛋疼。计划着改善公司的邮件服务。怎料公司网络封闭的太厉害了。我只能在家里利用开放点的网络来测试发送邮件; 利用qq邮箱发送到公司的企业邮箱上; 前提准备,登陆qq邮箱开启stmp服务。不开启的话没法通过代码登陆到你的邮箱; 查询腾讯qq邮箱的smtp主机地址为:smtp.qq.com