【问题标题】:How to read contents of MemoryStream, fed by a cryptostream如何读取由加密流提供的 MemoryStream 的内容
【发布时间】:2019-05-19 00:38:03
【问题描述】:

我正在使用 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();
}

这是代码中的 sn-p。

 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();
                                }


                            }
                        }

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

【问题讨论】:

    标签: c# .net memorystream


    【解决方案1】:

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

    【讨论】:

    • 好的,所以我会在另外 3 个周围添加另一个 using memorysteam ms = new memorystream(),然后读出那个?
    • 嘿蒂姆,这不会给我一个错误,但是,它只是返回一个空白字符串。 MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write); StreamWriter sw = new StreamWriter(cs); sw.Write(inpstr); StreamReader sr = new StreamReader(ms); return sr.ReadToEnd()
    • 在写入之后和读取之前将内存流移回开头:ms.Seek(0, SeekOrigin.Begin);
    • 同样的问题,只是返回一个空白字符串。 StreamWriterCryptoStreamMemoryStream 之间似乎存在问题。有什么想法吗?
    • 我通过使用虚拟包装器并将其转换为数组来工作,感谢您的帮助
    猜你喜欢
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多