Как правильно использовать SecureString?

101
30 мая 2021, 07:20

Например, нужно захешировать пароль методом string CalculateHash(string source). Но если я вытяну значение строки с SecureString в виде экземпляра класса string и передам его как атрибут, то эта строка попадёт в пул иинтернирования и будет лежать в памяти в открытом виде. Как бы правильно передать SecureString в метод CalculateHash, чтобы значение строки не осталось в памяти? Может можно каким-то образом использовать unsafe метод, который потом найдёт эту строку в адрессном пространстве приложения и затрёт её?

Answer 1

В вашем случае никак. У вас должен быть отдельный метод специально для такого сценария. Например: CalculateHash(SecureString source) или CalculateHash(IEnumerable<char> source)

Answer 2

Вот статья. Мне помогло.

Для ленивых:

String SecureStringToString(SecureString value) {
  IntPtr valuePtr = IntPtr.Zero;
  try {
    valuePtr = Marshal.SecureStringToGlobalAllocUnicode(value);
    return Marshal.PtrToStringUni(valuePtr);
  } finally {
    Marshal.ZeroFreeGlobalAllocUnicode(valuePtr);
  }
}

и

void HandleSecureString(SecureString value) {
  IntPtr valuePtr = IntPtr.Zero;
  try {
    valuePtr = Marshal.SecureStringToGlobalAllocUnicode(value);
    for (int i=0; i < value.Length; i++) {
      short unicodeChar = Marshal.ReadInt16(valuePtr, i*2);
      // handle unicodeChar
    }
  } finally {
    Marshal.ZeroFreeGlobalAllocUnicode(valuePtr);
  }
}

Т. к. защищённых строк нет в Windows, эти строки не такие уж и защищённые. Но делать так не рекомендую (как минимум потому что это не CLS Api). Тут как с методом финализации: юзать только если уж очень надо. Либо работайте со string, либо с byte[], либо с char[], либо перейдите сюда

READ ALSO
Когда и как включается DI в asp netcore

Когда и как включается DI в asp netcore

В описаниях DI для asp netcore пишут, что настройка выполняется в ConfigureServices() класса Startup

91
Покраска Excel при экспорте

Покраска Excel при экспорте

нужно покрасить определенные столбцы в другой цвет, но проблема в том, что он красит не только столбцы, но и все ячейки до конца файла, как...

91
Chrome failed to start: exited abnormally (unknown error: DevToolsActivePort file doesn&#39;t exist) Тест первый запустился прошел

Chrome failed to start: exited abnormally (unknown error: DevToolsActivePort file doesn't exist) Тест первый запустился прошел

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

147
Не могу добавить строку запроса в url

Не могу добавить строку запроса в url

Пытаюсь добавить в URL строку запроса Чтобы было https://localhost:44390/paramaspx?login=11 листинг

74