Я следую за MSDN Example of Rijndael Encryption, только чтобы я хотел был зашифровать и вернуть поток.Использование StreamWriter для записи в потоке (для шифрования большого потока)
Следующие не работают.
Это не исключение, но после прохождения кода, возвращаемое значение не имеет данных.
public static Stream EncryptStream(Stream plainStream, byte[] Key, byte[] IV)
{
var encrypted = new MemoryStream()
// Create an RijndaelManaged object
// with the specified key and IV.
using (RijndaelManaged rijAlg = new RijndaelManaged())
{
rijAlg.Key = Key;
rijAlg.IV = IV;
// Create a decrytor to perform the stream transform.
ICryptoTransform encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);
// Create the streams used for encryption.
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(plainStream);
}
msEncrypt.CopyTo(encrypted);
}
}
}
return encrypted;
}
Я смотрел на documentation for the Stream.Writer class, думая, что это что-то делать с ним не поддерживает запись в поток.
Я заметил, что есть параметр типа «объект», поэтому я предполагаю, что это сработает ... Это правильно? Если нет, как мне это сделать?
Я передаю ему FileStream, кстати. Выполняя код, plainStream содержит данные.
@AlexeiLevenkov Я не просил о «заходящего положении». Если это решение, я не мог знать, что это как-то связано с «установкой позиции» – user919426
@AlexeiLevenkov, на самом деле это не решает проблему. Если вы проигнорируете вызов CopyTo() и посмотрите на msEncrypt (поток), он не содержит данных. Попробуй. – user919426
@ user919426 Что делать, если вы выполняете 'msEncrypt.CopyTo (зашифрованный);' после удаления 'csEncrypt', все еще дает вам проблемы? – mishamosher