如何读取由加密流提供的 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();
}
}
}
我收到各种错误,例如流不可读,或者无法读取已关闭的流,以及返回空白字符串。
有没有人有任何想法?我很茫然
大多数流函数(如 StreamReader
、StreamWriter
等)会在您 Dispose()
时关闭底层流。尝试在完成之前不要处理它们,或者使用允许您选择不关闭底层流的构造函数。在极少数情况下,我不得不在流周围实现一个虚拟包装器以防止关闭底层流
我正在使用 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();
}
}
}
我收到各种错误,例如流不可读,或者无法读取已关闭的流,以及返回空白字符串。 有没有人有任何想法?我很茫然
大多数流函数(如 StreamReader
、StreamWriter
等)会在您 Dispose()
时关闭底层流。尝试在完成之前不要处理它们,或者使用允许您选择不关闭底层流的构造函数。在极少数情况下,我不得不在流周围实现一个虚拟包装器以防止关闭底层流