2

我一直想知道一些关于字符串函数的问题,例如 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=********";

哪个更适合使用?普通字符串处理(使用 substrings/replaceAll/indexOf)或 StringBuilder 函数?

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

4

2 回答 2

0

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

您不能有明文密码。就在你这样做。所以这是一个巨大的安全问题,如果你输入“*”而不是密码也没关系。它存在于内存中,从内存中提取密码需要很少的技能(假设攻击者可以访问机器)。

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

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

于 2013-08-27T07:44:10.140 回答
0

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

于 2013-08-29T11:11:11.317 回答