Шифрация большого файла без создания его копии для экономии места - C#
Формулировка задачи:
Шифрую и дешифрую файл AES вот таким способом( копипаста с msdn)
соответственно это создает шифрованную или дешифрованную копию файла)
и возникает трудности если нет свободного места для создание копии файла
собственно как побороть ?
public void EncryptFile(string inputFile, string outputFile) { using (var rijndael = RijndaelManaged.Create()) { rijndael.IV = IV; rijndael.Key = Key; using (var inputStream = File.OpenRead(inputFile)) using (var outputStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write)) using (var encStream = new CryptoStream(outputStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write)) { inputStream.CopyTo(encStream); } } } public void DecryptFile(string inputFile, string outputFile) { using (var rijndael = RijndaelManaged.Create()) { rijndael.IV = IV; rijndael.Key = Key; using (var inputStream = File.OpenRead(inputFile)) using (var decStream = new CryptoStream(inputStream, rijndael.CreateDecryptor(), CryptoStreamMode.Read)) using (var outputStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write)) { decStream.CopyTo(outputStream); } } }
Решение задачи: «Шифрация большого файла без создания его копии для экономии места»
textual
Листинг программы
using System; using System.IO; namespace rundmx { class Program { static void Main(string[] args) { string filename = Path.GetTempFileName(); byte[] array = new byte[32768]; // Создаём файл для теста, заполненный мусором. Random rnd = new Random(); using (FileStream stream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write)) { for (int i = 0; i < 1024; i++) { rnd.NextBytes(array); stream.Write(array, 0, array.Length); } } // Потоки на чтение и запись одного и того же файла. using (FileStream streamWrite = new FileStream(filename, FileMode.Open, FileAccess.Write, FileShare.Read), streamRead = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Write)) { while (true) { // Читаем. int readed = streamRead.Read(array, 0, array.Length); if (readed == 0) break; rnd.NextBytes(array); // Пишем. streamWrite.Write(array, 0, readed); } } File.Delete(filename); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д