SecureString, WinForms

Дано: WinForms, обычный TextBox куда вводится пароль.
Вопрос: Как правильно считывать данные из этого текстбокса в SecureString? Обрабатывать каждое нажатие с клавы в тестбоксе? Дайте пример, если не трудно.
  • Вопрос задан
  • 3351 просмотр
Решения вопроса 1
@codecity
SecureString усложняет получение ключа путем создания дампа памяти вашего процесса. Речь о тех ключах, которые постоянно используются приложением, к примеру для доступа к стороннему API (обычно пароли к ним не относятся, так как пароль в чистом виде не сохраняется). Если вы будете хранить ключ в string или byte[], то его легко получить, создав дамп памяти процесс и открыв в обычном текстовом редакторе.

Так что смотря что вам нужно. Лучше всего сохранять ключевую информацию в файле, предварительно зашифровав паролем. После ввода пароля нет необходимости держать его в памяти, лишь расшифровать файл с ключами доступа (а уже ключи хранить в SecureString).

Если же действительно нужно держать пароль в памяти (к примеру, для доступа к СУБД), то вот самый просто вариант:

var secure = new SecureString();
foreach (char c in textbox1.Text)
{
    secure.AppendChar(c);
}


Но, как сами понимаете, пока открыта форма ввода пароля и пока сборщик мусора не очистил значение Text — данные пароля можно перехватить. После закрытия формы останется только SecureString, пароля в открытом виде нет.

Есть и более параноидальные способы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы