Криптопоток: ошибка чтения данных - PullRequest
0 голосов
/ 20 марта 2012

Я получил это (я также попробовал crStream.CopyTo (мс)):

 var cryptic = new DESCryptoServiceProvider();
 cryptic.Key = ASCIIEncoding.ASCII.GetBytes(passKey);
 cryptic.IV = ASCIIEncoding.ASCII.GetBytes(passKey);
 Stream crStream = new CryptoStream(data, cryptic.CreateEncryptor(), CryptoStreamMode.Write);

 Stream ms = new MemoryStream();

 var buffer = new byte[0x10000];
 int n;
 while ((n = crStream.Read(buffer, 0, buffer.Length)) != 0)  // Exception occurs here         
     ms.Write(buffer, 0, n);            
 crStream.Close();

Data = Stream и содержит двоичный сериализованный класс

При запуске я получаю следующее исключение: «Поток не поддерживает чтение.»

То, что я пытаюсь сделать, - это просто зашифровать данные из потока.Итак, у меня есть входящий поток, и я хочу зашифровать эти данные и поместить их в поток памяти.Затем он будет сжат и сохранен в файл.

1 Ответ

2 голосов
/ 20 марта 2012

ошибка говорит обо всем: вы создаете поток для шифрования (= вставляете обычный текст и получаете зашифрованный вывод в виде записи):

Stream crStream = new CryptoStream(data, cryptic.CreateEncryptor(), CryptoStreamMode.Write);

Просто взгляните на документацию MSDN для CryptoStream - есть пример того, как сделать это правильно - в основном эта часть (прямо из MSDN):

using (MemoryStream msEncrypt = new MemoryStream())
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
    using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
    {
        //Write all data to the stream.
        swEncrypt.Write(plainText);
    }
    encrypted = msEncrypt.ToArray();
}
...