2013-08-27 2 views
1

Мне было интересно немного о строковых функциях, таких как 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

В настоящее время я использую Java для этого варианта использования. Хотя решение в C# также было бы очень полезно. – Rg90

ответ

0

Я использовал String.replaceAll(regex, replace) метод, чтобы найти password или emailPassword и т. Д. И сделал маскировку. Не уверен, если это самый идеальный метод для маскировки в этом случае.

0

Я предполагаю, что это C#, но этот ответ действителен для многих других языков.

У вас не должно быть паролей в ясном тексте. Просто сейчас. Так что это огромная проблема безопасности, и неважно, вставите ли вы «*» вместо пароля. Он присутствует в памяти, и для извлечения паролей из памяти требуется небольшое умение (данный злоумышленник имеет доступ к машине).

Стандартный подход заключается в том, что вы храните только хэш и соль для хранения. Теперь проблема заключается в том, как вы конвертируете пароль в хэш и как вы безопасно распоряжаетесь исходным паролем. Для этого вы должны использовать SecureString, который шифрует строку пароля в памяти и надежно удаляет ее из памяти, когда она больше не нужна.

Чтобы дать прямой ответ на ваш вопрос: вы не используете какой-либо подход для замены символа пароля звездой. Любой подход в этом случае небезопасен.