Шифрация большого файла без создания его копии для экономии места - 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);
        }
    }
}

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


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

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

7   голосов , оценка 3.571 из 5
Похожие ответы