Я использую .NET 4.0 и пытаюсь сделать следующее:
- Создание System.IO.Packaging.Package в памяти
- Добавить товары в пакет
- зашифровать пакет перед записью в файл.
Я попытался создать 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: «Файл содержит поврежденные данные.»
Это не то же самое сообщение, которое вы получите, если расшифровка не удалась. Я ожидал бы, что поток, который вошел во время шифрования, является тем же самым как поток, который вышел, так что любая идея, почему пакет будет поврежден?