Решение SecureString хорошо, но имеет внутреннее противоречие? - PullRequest
3 голосов
/ 31 декабря 2011

Я видел эту тему:

Когда мне понадобится SecureString в .NET?

код есть:

SecureString password = new SecureString("password");

против

SecureString pass = new SecureString();
foreach (char c in "password".ToCharArray())
    pass.AppendChar(c);

И я действительно понимаю преимущества второго (добавление char к char) - так что хакер не сможет отследить все символы в случайных местах в памяти (против одной строки в mem, которую он может найти).

Часть, которую я не понимаю, это та часть: enter image description here

этот желтый код находится в памяти!

итак ... где выгода?

Ответы [ 2 ]

3 голосов
/ 31 декабря 2011

Второй пример кода с ToCharArray() просто демонстрирует ограниченный способ заполнения строки безопасности.Это не образец (лучшей) практики.

В теме, на которую вы ссылаетесь, содержится большинство ответов: Securestring обеспечивает частичное решение, позволяющее избежать использования простых текстовых паролей (в памяти).Не полное решение.

Но возьмите эти 2 пункта из принятого ответа:

  • Элемент управления PasswordBox WPF внутренне сохраняет пароль как SecureString.
  • Свойство Password для System.Diagnostics.ProcessInfo равноSecureString.

Вместе они позволят вам безопасно передать пароль процессу.

1 голос
/ 31 декабря 2011

Пароль всегда будет незашифрован в какое-то время.Вопрос в том, «как долго?». Если вы храните его в памяти в течение полчаса в незашифрованном виде, то он, скорее всего, будет взломан, а не строкой, которая собирается через несколько секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...