zawartość pliku tekstowego zapisze do zaszyfrowanego algorytmem AES skompresowanego strumienia GZip a następnie odpakuje i odszyfruje
Mój kod:
public class Test
{
public static void Main(string[] args)
{
var file = @"C:\Users\Mikołaj\Desktop\myfile.txt";
var fs = File.OpenRead(file);
using (AesCryptoServiceProvider myAes = new AesCryptoServiceProvider())
{
var Zipped = ZipStream(fs, myAes.Key, myAes.IV);
var UnZipped = UnZipStream(Zipped, myAes.Key, myAes.IV);
}
}
public static Stream ZipStream(Stream StreamIn, byte[] Key, byte[] IV) //pakowanie
{
var data = ConvertToByteArray(StreamIn);
using (MemoryStream ms = new MemoryStream())
{
using (GZipStream gzStream = new GZipStream(ms, CompressionMode.Compress, true))
{
gzStream.Write(data, 0, data.Length);
}
return EncryptTextToMemory(ms.ToArray(), Key, IV);
}
}
private static Stream EncryptTextToMemory(byte[] Data, byte[] Key, byte[] IV) //szyfrowanie
{
using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
var encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
var msEncrypt = new MemoryStream();
var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
csEncrypt.Write(Data, 0, Data.Length);
return msEncrypt;
}
}
public static Stream UnZipStream(Stream StreamIn, byte[] Key, byte[] IV) //rozpakowanie
{
const int BUFFER_SIZE = 4096;
var EncryptedData = ConvertToByteArray(StreamIn);
var DecryptedStream = DecryptTextFromMemory(EncryptedData, Key, IV);
var Data = ConvertToByteArray(DecryptedStream);
var GZipStream = new GZipStream(new MemoryStream(Data), CompressionMode.Decompress, true);
var Buffer = new byte[BUFFER_SIZE];
var MemStream = new MemoryStream();
int BytesRead;
while ((BytesRead = GZipStream.Read(Buffer, 0, BUFFER_SIZE)) > 0)
{
MemStream.Write(Buffer, 0, BytesRead);
}
return MemStream;
}
public static Stream DecryptTextFromMemory(byte[] Data, byte[] Key, byte[] IV) //odszyfrowanie
{
using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
var decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
var msDecrypt = new MemoryStream(Data);
var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
return csDecrypt;
}
}
private static byte[] ConvertToByteArray(Stream StreamIn)
{
StreamIn.Position = 0; //not supportedexception was unhandled ...
using (var InputStream = new MemoryStream())
{
StreamIn.CopyTo(InputStream);
return InputStream.ToArray();
}
}
}
Wyrzuca błąd na metodzie ConvertToByteArray. Błąd jest opisany przy linijce którą wyrzuca.
Nie wiem jak się za to zabrać.
Ktoś ma pomysł ? :(