我一直想知道关于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,所以我对这种情况使用它几乎一无所知。
答案 0 :(得分:0)
我认为这是C#,但这个答案对许多其他语言都有效。
您不得以明文形式提供密码。刚才你这样做。所以这是一个巨大的安全问题,如果你输入“*”而不是密码并不重要。它存在于内存中,从内存中提取密码需要很少的技巧(攻击者可以访问该机器)。
标准方法是您只存储密码哈希和盐。现在的问题是如何将密码转换为哈希,以及如何安全地处理原始密码。为此,您应该使用SecureString加密内存中的密码字符串,并在不再需要时将其从内存中安全删除。
直接回答您的问题:您不使用任何方法用星号替换密码字符。在这种情况下,任何方法都是不安全的。
答案 1 :(得分:0)
我使用String.replaceAll(regex, replace)
方法搜索password
或emailPassword
等并进行了屏蔽。不确定,如果这是在这种情况下进行屏蔽的最理想方法。