Я хотел бы удалить строку из памяти приложения .NET. Допустим, у нас есть метод дешифрования, который поступает из сторонней библиотеки lib и возвращает строку. Это не умно, но я ничего не могу с этим поделать.Удаление содержимого строки
String s = SomeComponent.Decrypt("cypherstring")
Теперь я хотел бы скопировать содержимое s
в SecureString
работать. Но ... как мне избавиться от s
. Я знаю, что GC собирает его здесь, но если бы я использовал эту строку некоторое время, она осталась бы. Также я хотел бы не полагаться на GC здесь, поскольку это может быть связано с безопасностью, что требует моего детективного кода.
Моя идея что-то вроде этого:
public static SecureString Convert(ref String s)
{
//copy content of s into SecureString
//shred s
}
Там не большое дело, чтобы скопировать данные в SecureString, но как «уничтожить» S?
Почему, по вашему мнению, копирование будет безопаснее? вы уже создали новую строку (ы), где вывод скопирован на ... И как только он не будет использоваться снова в коде, он получит GC'd, так что если его локальная переменная будет получать GC'd довольно быстро. – EpicKip
Я предполагаю, что вы могли бы использовать комбинацию «Marshall.DestroyStructure» и «Marshall.FreeHAlloc», чтобы делать то, что хотите, и вы даже можете пойти на ядерный с «GC.Collect», но я согласен с EpicKip в том, что, вероятно, это не обязательно, особенно если это локальная переменная. – Abion47
Вы можете, по крайней мере, установить s на другое значение, если вы не хотите, чтобы данные были доступны для чтения, поэтому даже он не обрабатывается GC на данный момент, ничего не останется с исходным значением stringcontent – Pedro