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