在String中屏蔽密码

时间:2013-08-27 07:19:59

标签: regex string replace substring masking

我一直想知道关于String函数的很多东西,比如replace()。

我的目标很简单。我有一个记录器,它将字符串记录到一个文本文件中,该文件包含在将其写入日志文件之前需要屏蔽的密码。

例如:

str = "-field_value=userId=1,-field_value=password=pass123,-field_value=location=London,-field_value=day=Tuesday,-field_value=emailPassword=pass123,-field_value=fbPassword=pass1234";

在这种情况下,哪种方法最好?该字符串可能以任何密码“field_value”结束也可能不会结束。

我需要用它们的确切长度来掩盖所有出现的“密码”,在这个字符串中得到以下输出:

str = "-field_value=userId=1,-field_value=password=*******,-field_value=location=London,-field_value=day=Tuesday,-field_value=emailPassword=*******,-field_value=fbPassword=********";

哪种更适合使用?正常的字符串处理(使用子字符串/ replaceAll / indexOf)或StringBuilder函数?

此外,在这种情况下使用正则表达式的效果如何?我从来没有广泛使用过Regex,所以我对这种情况使用它几乎一无所知。

2 个答案:

答案 0 :(得分:0)

我认为这是C#,但这个答案对许多其他语言都有效。

您不得以明文形式提供密码。刚才你这样做。所以这是一个巨大的安全问题,如果你输入“*”而不是密码并不重要。它存在于内存中,从内存中提取密码需要很少的技巧(攻击者可以访问该机器)。

标准方法是您只存储密码哈希和盐。现在的问题是如何将密码转换为哈希,以及如何安全地处理原始密码。为此,您应该使用SecureString加密内存中的密码字符串,并在不再需要时将其从内存中安全删除。

直接回答您的问题:您不使用任何方法用星号替换密码字符。在这种情况下,任何方法都是不安全的。

答案 1 :(得分:0)

我使用String.replaceAll(regex, replace)方法搜索passwordemailPassword等并进行了屏蔽。不确定,如果这是在这种情况下进行屏蔽的最理想方法。