Шифрование потока ZipPackage в памяти - PullRequest
1 голос
/ 03 марта 2012

Я использую .NET 4.0 и пытаюсь сделать следующее:

  1. Создание System.IO.Packaging.Package в памяти
  2. Добавить товары в пакет
  3. зашифровать пакет перед записью в файл.

Я попытался создать MemoryStream и добавить в него файлы:

 using (var memoryZip = Package.Open(_memoryStream, FileMode.Open))
 {
      var partUri = PackUriHelper.CreatePartUri(_fileUri);
      var part = memoryZip.CreatePart(
          partUri,
          String.Empty,
          CompressionOption.NotCompressed);

      using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
      {
           fileStream.CopyTo(packagePart.GetStream());
      }
  }

Затем я попытался зашифровать его и сохранить в файл:

 _key = new DESCryptoServiceProvider
 {
      Key = Encoding.ASCII.GetBytes(_password);
      IV = Encoding.ASCII.GetBytes(_password);
 }
 var fileStream = File.Open(_fileName, FileMode.Create, FileAccess.Write);
 var cryptoStream = new CryptoStream(streamToFile, _key.CreateEncryptor(), CryptoStreamMode.Write);

 //Convert filestream to byte[]
 var streamAsBytes = new byte[(_memoryStream.Length)];
 _memoryStream.Read(streamAsBytes, 0, streamAsBytes.Length);

 //Encrypt
 cryptoStream.Write(streamAsBytes, 0, streamAsBytes.Length);

 fileStream.Close();
 cryptoStream.Flush();
 cryptoStream.Close();

Однако, когда я иду расшифровать его:

 var fileStream = new FileStream(_zipFileName, FileMode.Open, FileAccess.Read);
 var cryptoStream = new CryptoStream(fileStream, _key.CreateDecryptor(), CryptoStreamMode.Read);

 using(var zipPackage = Package.Open(cryptoStream, FileMode.Open))

Я получаю FileFormatException: «Файл содержит поврежденные данные.»

Это не то же самое сообщение, которое вы получите, если расшифровка не удалась. Я ожидал бы, что поток, который вошел во время шифрования, является тем же самым как поток, который вышел, так что любая идея, почему пакет будет поврежден?

...