.net Расшифровывать большие файлы на лету - PullRequest
2 голосов
/ 09 сентября 2011

Мне нужно зашифровать и сохранить загруженные файлы.

Эти файлы затем будут расшифрованы и загружены с использованием механизма токенов / токенов.

Важно, чтобы файлы не находились в незашифрованном виде,Системные администраторы не должны иметь к ним случайный доступ.

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

Процесс шифрования может занятьДо тех пор, пока это будет необходимо.

Однако я бы хотел, чтобы процесс шифрования работал на лету - чтобы в файле не было 10 ГБ дешифрованного файла, а только часть его в памяти (у меня нет 10 ГБ оперативной памяти.для этого).

Есть предложения, как этого добиться?

1 Ответ

5 голосов
/ 09 сентября 2011

Большинство шифрований основано на потоке, так что это вообще не должно быть проблемой - просто запустите FileStream как вход для CryptoStream и используйте , что как источник для того, чтобы вы потребляли данные;который может быть в процессе обработки или может быть пунктом назначения FileStream (в этом случае достаточно cryptoStream.CopyTo(outputFileStream)).

Если я позаимствую пример из MSDN и отредактируючтобы показать запись в двоичном виде:

using(FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate))
{
    // Create a new Rijndael object.
    Rijndael RijndaelAlg = Rijndael.Create();

    // Create a CryptoStream using the FileStream 
    // and the passed key and initialization vector (IV).
    using(CryptoStream cStream = new CryptoStream(fStream,
        RijndaelAlg.CreateDecryptor(Key, IV),
        CryptoStreamMode.Read))
    using(FileStream destination = File.Create(destinationPath))
    {
        cStream.CopyTo(destination);
    }
}

Однако cStream может использоваться для любого Stream чтения на основе.

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