如何读取由加密流提供的 MemoryStream 的内容

How to read contents of MemoryStream, fed by a cryptostream

我正在使用 C# 进行一些 AES 加密。我有一个类似的解密方法,可以完美运行,但是,无论我尝试什么,我都无法读取 MemoryStream 的加密内容

我尝试了几种不同的阅读方式,

ms.Position = 0;
return new StreamReader(ms, Encoding.ASCII).ReadToEnd()
OR
using (StreamReader sr = new StreamReader(cs)) {
return sr.ReadToEnd();
}
OR
byte[] enc = ms.ToArray();
string ret=null;
foreach (byte b in enc) {
ret += b.ToString();
}

这是代码片段。

 using (AesManaged aesMan = new AesManaged()) {
                if (keystr.Length == aesSize/8)
                {
                    //Its a valid key
                    aesMan.KeySize = aesSize;
                    aesMan.Key = Encoding.UTF8.GetBytes(keystr);
                    aesMan.IV = Encoding.UTF8.GetBytes(ivstr);

                    ICryptoTransform encryptor aesMan.CreateEncryptor(aesMan.Key, aesMan.IV);
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                        {
                            using (StreamWriter sw = new StreamWriter(cs))
                            {
                                sw.Write(inpstr);
                                using (StreamReader sr = new StreamReader(ms)) {
                                    return sr.ReadToEnd();
                                }


                            }
                        }

我收到各种错误,例如流不可读,或者无法读取已关闭的流,以及返回空白字符串。 有没有人有任何想法?我很茫然

大多数流函数(如 StreamReaderStreamWriter 等)会在您 Dispose() 时关闭底层流。尝试在完成之前不要处理它们,或者使用允许您选择不关闭底层流的构造函数。在极少数情况下,我不得不在流周围实现一个虚拟包装器以防止关闭底层流