Шифрация большого файла без создания его копии для экономии места - 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);
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д