LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

封装一个方法,使用 C# 正则表达式巧妙隐藏 JSON 字符串中的敏感信息,守护密码安全

admin
2024年12月30日 12:21 本文热度 376

前言

嗨,大家好!

想象一下,你正在开发一款应用程序,突然遇到了这样一个棘手的问题:

你需要将对象序列化为 JSON 字符串并打印到日志中进行调试,但这其中包含了敏感的密码信息。

如果直接将这些密码暴露在日志里,不仅违反了安全最佳实践,还可能引发严重的隐私泄露风险。

这时候,你可能会想到几种解决方案:

  • 忽略序列化:将密码字段标记为 [JsonIgnore] 或类似的属性,但这可能会影响到其他业务逻辑,特别是当实体类位于较低层次时。

  • 手动打印字段:逐一打印对象的字段内容,但这显然非常麻烦,尤其是当实体类包含大量字段时,或者实体类有变动时。

那么,有没有一种更优雅、影响最小的方式来解决这个问题呢?

答案是肯定的!

今天,我们可以利用 C# 的正则表达式,封装编写一个简洁而强大的方法,自动隐藏 JSON 字符串中的密码字段。

这种方式不仅实现起来简单,而且对现有代码的影响极小,非常适合在实际项目中应用。

让我们一起动手试试吧!

封装方法

下面是我封装的方法,通过正则表达式,它能够智能地识别并隐藏 JSON 字符串中的密码字段,留意代码中的注释

/// <summary>
/// 隐藏Json字符串中的密码
/// </summary>
/// <param name="jsonData">需要处理的 JSON 字符串</param>
/// <returns>处理后的 JSON 字符串,其中密码字段已被隐藏</returns>
public static string HidePassword(string jsonData)
{
    string newJsonData = null;

    // 定义替换模式,使用命名捕获组 "str" 来匹配键名
    string replacement = "\"${str}\":\"********\"";

    // 匹配包含 "password" 的键名(不区分大小写)
    // 替换为星号掩码
    string pattern1 = "\"(?<str>([A-Za-z0-9_]*)password)\":\"(.*?)\""

    // 使用正则表达式替换所有匹配项
    newJsonData = Regex.Replace(jsonData, pattern1, replacement, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline);

    // 如果有多个不同的密码字段(如 pwd),可以继续增加隐藏语句
    // 或者将它单独抽出来作为一个子方法
    // string pattern2 = "\"(?<str>([A-Za-z0-9_]*)pwd)\":\"(.*?)\"";
    // newJsonData = Regex.Replace(newJsonData, pattern2, replacement, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline);

    // 返回处理后的 JSON 字符串
    return newJsonData;
}

使用示例

接下来,我们来看看如何在实际代码中调用这个方法。

假设你有一个包含用户名和密码的 JSON 字符串,只需几行代码就可以将其密码字段安全地隐藏起来。

class Program
{
    static void Main()
    {
        // 假设这是从某个地方获取的 JSON 字符串
        string jsonData = "{\"username\":\"Jacky\", \"password\":\"123456\",\"Age\":35}";

        // 调用 HidePassword 方法隐藏密码字段
        string sanitizedJson = SecurityUtil.HidePassword(jsonData);

        // 输出处理后的 JSON 字符串
        Console.WriteLine(sanitizedJson);
    }
}

测试

按 Ctrl+F5 编译并运行程序,你会在控制台看到如下图输出:

这说明我们已经将原始密码 123456 替换成了 ********,从而有效地保护了敏感信息

总结

这是老杨最近碰到的一个有趣的业务需求而封装的方法。

通过使用 C# 正则表达式,我们轻松实现了隐藏 JSON 字符串中密码字段的功能,既解决了安全隐患问题,又不影响原有的代码,同时还保持了代码的简洁性和可维护性。

这个方法不仅可以用于日志记录,还可以应用于任何需要保护敏感信息的场景。

你可以将它直接应用到你的项目中,通过这个封装的方法,当你遇到相似的业务需求时,再也不需要浪费时间寻找合适的方法了,相信它可以帮助你大大提高工作效率!


该文章在 2024/12/30 12:28:24 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved