Это приложение отображает форму с текстовым полем, где пользователь должен ввести пароль, используемый для расшифровки документа.
У меня есть такой код:
string password = passwordTextBox.Text;
...
DecryptDocument(password);
Но мне сказали, что с технической точки зрения это брешь в системе безопасности, потому что данные, представляющие пароль, могут оставаться в памяти даже после закрытия приложения.
Я пытался использовать класс System.Security.SecureString, но теперь я имею дело с указателями на CoTaskMem, что усугубляет проблему:
SecureString password = new SecureString();
foreach(char i in passwordTextBox.Text.ToCharArray())
password.AppendChar(i);
IntPtr ptr = Marshal.SecureStringToCoTaskMemAnsi(password);
int length = password.Length;
byte[] bytes = new byte[length];
Marshal.Copy(ptr, bytes, 0, length);
DecryptDocument(Encoding.Default.GetString(bytes));
Marshal.FreeCoTaskMem(ptr);
Как видите, это не похоже на то, что я делаю приложение безопаснее, так как рано или поздно мне придется взять ввод (passwordTextBox.Text) и преобразовать его в строку, которую я могу передать функции DecryptDocument().
Есть ли способ решить эту проблему или мне просто нужно устранить эту уязвимость?