SecureString усложняет получение ключа путем создания дампа памяти вашего процесса. Речь о тех ключах, которые постоянно используются приложением, к примеру для доступа к стороннему API (обычно пароли к ним не относятся, так как пароль в чистом виде не сохраняется). Если вы будете хранить ключ в string или byte[], то его легко получить, создав дамп памяти процесс и открыв в обычном текстовом редакторе.
Так что смотря что вам нужно. Лучше всего сохранять ключевую информацию в файле, предварительно зашифровав паролем. После ввода пароля нет необходимости держать его в памяти, лишь расшифровать файл с ключами доступа (а уже ключи хранить в SecureString).
Если же действительно нужно держать пароль в памяти (к примеру, для доступа к СУБД), то вот
самый просто вариант:
var secure = new SecureString();
foreach (char c in textbox1.Text)
{
secure.AppendChar(c);
}
Но, как сами понимаете, пока открыта форма ввода пароля и пока сборщик мусора не очистил значение Text — данные пароля можно перехватить. После закрытия формы останется только SecureString, пароля в открытом виде нет.
Есть и более
параноидальные способы.