Я создаю MemoryStream
, передаю его CryptoStream
для записи. Я хочу, чтобы CryptoStream
зашифровал и оставил MemoryStream
открытым для меня, чтобы потом читать что-то еще. Но как только CryptoStream
находится, он также располагает MemoryStream
.Может ли CryptoStream оставить базовый поток открытым?
Can CryptoStream
Оставить базу MemoryStream
Открыть как-нибудь?
using (MemoryStream scratch = new MemoryStream())
{
using (AesManaged aes = new AesManaged())
{
// <snip>
// Set some aes parameters, including Key, IV, etc.
// </snip>
ICryptoTransform encryptor = aes.CreateEncryptor();
using (CryptoStream myCryptoStream = new CryptoStream(scratch, encryptor, CryptoStreamMode.Write))
{
myCryptoStream.Write(someByteArray, 0, someByteArray.Length);
}
}
// Here, I'm still within the MemoryStream block, so I expect
// MemoryStream to still be usable.
scratch.Position = 0; // Throws ObjectDisposedException
byte[] scratchBytes = new byte[scratch.Length];
scratch.Read(scratchBytes,0,scratchBytes.Length);
return Convert.ToBase64String(scratchBytes);
}
Почему вы используете потоки в первую очередь? Просто вызовите 'encryptor.TransformFinalBlock' на входные байты. Потоки в основном полезны для инкрементного шифрования/дешифрования, но не тогда, когда у вас есть все доступные данные одновременно. – CodesInChaos