2013-08-27 86 views
1

我一直在想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=********"; 

這將是一個更合適的選擇使用?正常的字符串處理(使用substrings/replaceAll/indexOf)或StringBuilder函數?

此外,在這種情況下使用正則表達式有多有效?我從來沒有廣泛使用過Regex,所以我沒有想到在這種情況下使用它。

+0

我目前對這個用例使用Java。雖然C#中的解決方案也會非常有幫助。 – Rg90

回答

0

我用String.replaceAll(regex, replace)的方法,來搜索passwordemailPassword等,並做了掩蔽。不確定,如果這是在這種情況下做掩模的最理想的方法。

0

我認爲這是C#,但這個答案對許多其他語言有效。

您不能以明文顯示密碼。剛剛你做了。所以這是一個巨大的安全問題,如果你輸入「*」而不是密碼就沒關係。它在內存中,並且需要很少技能從內存中提取密碼(因爲攻擊者可以訪問機器)。

一個標準的方法是,你只存儲密碼哈希和鹽。現在的問題是如何將密碼轉換爲散列,以及如何安全地處理原始密碼。爲此,您應該使用SecureString加密內存中的密碼字符串,並在不再需要時將其從內存中安全地刪除。

要直接回答您的問題:您不使用任何方法來用星號替換密碼字符。這種情況下的任何方法都是不安全的。