【发布时间】:2013-11-13 05:40:26
【问题描述】:
我创建了一个MemoryStream,将其传递给CryptoStream 进行编写。我希望CryptoStream 加密,并让MemoryStream 对我开放,然后再读入其他内容。但是一旦CryptoStream 被处理,它也会处理MemoryStream。
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。流主要用于增量加密/解密,但在您同时拥有完整数据时则不然。
标签: c# stream objectdisposedexception