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

メソッドを使用してorなどString.replaceAll(regex, replace)を検索し、マスキングを行いました。この場合、それがマスキングを行うための最も理想的な方法であるかどうかはわかりません。passwordemailPassword

于 2013-08-29T11:11:11.317 に答える
0

これは C# だと思いますが、この回答は他の多くの言語でも有効です。

クリア テキストのパスワードを使用しないでください。ちょうど今、あなたはそうします。したがって、これはセキュリティ上の大きな問題であり、パスワードの代わりに「*」を使用しても問題ありません。パスワードはメモリ内に存在し、メモリからパスワードを抽出するスキルはほとんど必要ありません (攻撃者がマシンにアクセスできる場合)。

標準的なアプローチは、パスワード ハッシュとソルトのみを保存することです。問題は、パスワードをハッシュに変換する方法と、元のパスワードを安全に破棄する方法です。この目的のために、メモリ内のパスワード文字列を暗号化し、不要になったときにメモリから安全に削除するSecureStringを使用する必要があります。

あなたの質問に直接答えるには、パスワードの文字を星に置き換える方法を使用しません。この場合のアプローチは安全ではありません。

于 2013-08-27T07:44:10.140 に答える