Шифрация большого файла без создания его копии для экономии места - C#

Узнай цену своей работы

Формулировка задачи:

Шифрую и дешифрую файл AES вот таким способом( копипаста с msdn)
Листинг программы
  1. public void EncryptFile(string inputFile, string outputFile)
  2. {
  3. using (var rijndael = RijndaelManaged.Create())
  4. {
  5. rijndael.IV = IV;
  6. rijndael.Key = Key;
  7. using (var inputStream = File.OpenRead(inputFile))
  8. using (var outputStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
  9. using (var encStream = new CryptoStream(outputStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write))
  10. {
  11. inputStream.CopyTo(encStream);
  12. }
  13. }
  14. }
  15. public void DecryptFile(string inputFile, string outputFile)
  16. {
  17. using (var rijndael = RijndaelManaged.Create())
  18. {
  19. rijndael.IV = IV;
  20. rijndael.Key = Key;
  21. using (var inputStream = File.OpenRead(inputFile))
  22. using (var decStream = new CryptoStream(inputStream, rijndael.CreateDecryptor(), CryptoStreamMode.Read))
  23. using (var outputStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
  24. {
  25. decStream.CopyTo(outputStream);
  26. }
  27. }
  28. }
соответственно это создает шифрованную или дешифрованную копию файла) и возникает трудности если нет свободного места для создание копии файла собственно как побороть ?

Решение задачи: «Шифрация большого файла без создания его копии для экономии места»

textual
Листинг программы
  1. using System;
  2. using System.IO;
  3.  
  4. namespace rundmx
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             string filename = Path.GetTempFileName();
  11.             byte[] array = new byte[32768];
  12.  
  13.             // Создаём файл для теста, заполненный мусором.
  14.             Random rnd = new Random();
  15.  
  16.             using (FileStream stream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write))
  17.             {
  18.                 for (int i = 0; i < 1024; i++)
  19.                 {
  20.                     rnd.NextBytes(array);
  21.                     stream.Write(array, 0, array.Length);
  22.                 }
  23.             }
  24.  
  25.             // Потоки на чтение и запись одного и того же файла.
  26.             using (FileStream streamWrite = new FileStream(filename, FileMode.Open, FileAccess.Write, FileShare.Read),
  27.                 streamRead = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Write))
  28.             {
  29.                 while (true)
  30.                 {
  31.                     // Читаем.
  32.                     int readed = streamRead.Read(array, 0, array.Length);
  33.  
  34.                     if (readed == 0)
  35.                         break;
  36.  
  37.                     rnd.NextBytes(array);
  38.                     // Пишем.
  39.                     streamWrite.Write(array, 0, readed);
  40.                 }
  41.             }
  42.  
  43.             File.Delete(filename);
  44.         }
  45.     }
  46. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы