Износ содержимого управляемых переменных

1

У меня есть приложение, использующее криптографию, в основном в потоках (файл и память), которые я дешифрую по мере необходимости в новом MemoryStream. Все это хорошо работает. Единственное, что я хотел бы удалить содержимое MemoryStream, когда я закончил с ним (а также строки и т.д., В которые я копирую фрагменты), чтобы он никогда не попадал на диск в дешифрованной форме через файл подкачки. В "хорошем старомодном" C++ я бы просто свернул данные со случайным мусором, прежде чем удалил его - есть ли способ с управляемыми объектами?

  • 2
    Для строки вы должны использовать SecureString .
  • 0
    Что мешает переписать его на диск в расшифрованном виде, прежде чем вы закончите с ним?
Теги:

1 ответ

0
Лучший ответ

Вы можете получить базовый байт [] с помощью MemoryStream.GetBuffer, а затем заполнить его случайными данными.

В небезопасном контексте вы обычно делаете это с помощью Random.NextBytes, но в вашем случае RNGCryptoServiceProvider.GetBytes предоставляет криптографически безопасный генератор случайных чисел в качестве источника байтов заполнения.

После извлечения буфера утилита MemoryStream обычно вызывается функцией MemoryStream.Dispose.

  • 0
    Для этой цели вам не нужен криптографически безопасный PRNG. Это будет просто излишне медленно, увеличивая время, которое конфиденциальные данные проводят в памяти.
  • 0
    Маловероятно, что он будет работать так, как хочет OP, поскольку GC может перемещать (небольшое) распределение вокруг, поэтому есть вероятность, что базовый байтовый массив скопирован GC в какое-то другое место и еще не уничтожен ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню