Например, нужно захешировать пароль методом string CalculateHash(string source)
. Но если я вытяну значение строки с SecureString в виде экземпляра класса string
и передам его как атрибут, то эта строка попадёт в пул иинтернирования и будет лежать в памяти в открытом виде. Как бы правильно передать SecureString
в метод CalculateHash
, чтобы значение строки не осталось в памяти? Может можно каким-то образом использовать unsafe метод, который потом найдёт эту строку в адрессном пространстве приложения и затрёт её?
В вашем случае никак. У вас должен быть отдельный метод специально для такого сценария. Например: CalculateHash(SecureString source)
или CalculateHash(IEnumerable<char> source)
Вот статья. Мне помогло.
Для ленивых:
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[]
, либо перейдите сюда
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
В описаниях DI для asp netcore пишут, что настройка выполняется в ConfigureServices() класса Startup
нужно покрасить определенные столбцы в другой цвет, но проблема в том, что он красит не только столбцы, но и все ячейки до конца файла, как...
проблема в чем: поставил chromedriver через консоль, тест первый раз запустился прошел, следующий сразу упал, потом постоянно такая ошибка, возможно...
Пытаюсь добавить в URL строку запроса Чтобы было https://localhost:44390/paramaspx?login=11 листинг