加密流:读出的数据错误
问题描述:
我得到这个(我也尝试crStream.CopyTo(毫秒)):加密流:读出的数据错误
var cryptic = new DESCryptoServiceProvider();
cryptic.Key = ASCIIEncoding.ASCII.GetBytes(passKey);
cryptic.IV = ASCIIEncoding.ASCII.GetBytes(passKey);
Stream crStream = new CryptoStream(data, cryptic.CreateEncryptor(), CryptoStreamMode.Write);
Stream ms = new MemoryStream();
var buffer = new byte[0x10000];
int n;
while ((n = crStream.Read(buffer, 0, buffer.Length)) != 0) // Exception occurs here
ms.Write(buffer, 0, n);
crStream.Close();
数据=流和包含一个二进制序列化类
以下发生异常时,我运行它: “流不支持读取。”
我想完成的是简单地从流中加密数据。因此,我有一个传入流,我想加密该数据并将其放入内存流中。这将被压缩并保存到一个文件。
答
错误说明了一切:你创建加密的数据流(=把纯文本,并得到加密输出,在写):
Stream crStream = new CryptoStream(data, cryptic.CreateEncryptor(), CryptoStreamMode.Write);
只要有一个看MSDN的文档以CryptoStream - 有包括怎么做是正确的一个例子 - 它基本上是这部分(右从MSDN):
using (MemoryStream msEncrypt = new MemoryStream())
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
//Write all data to the stream.
swEncrypt.Write(plainText);
}
encrypted = msEncrypt.ToArray();
}
因此,这意味着我必须把数据从我流的所谓的数据转换成字节数组,然后把它写入密码流中以便能够访问它? (Data = Stream并包含二进制序列化类) – Patrick 2012-03-20 10:01:00
否 - 您应该能够在源流上使用CopyTo(http://msdn.microsoft.com/en-us/library/dd782932.aspx)进行复制数据转化为密码流 – Carsten 2012-03-20 10:07:36