2012-03-20 28 views
0

我得到这个(我也尝试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(); 

数据=流和包含一个二进制序列化类

以下发生异常时,我运行它: “流不支持读取。”

我想完成的是简单地从流中加密数据。因此,我有一个传入流,我想加密该数据并将其放入内存流中。这将被压缩并保存到一个文件。

回答

2

错误说明了一切:你创建加密的数据流(=把纯文本,并得到加密输出,在写):

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

因此,这意味着我必须把数据从我流的所谓的数据转换成字节数组,然后把它写入密码流中以便能够访问它? (Data = Stream并包含二进制序列化类) – Patrick 2012-03-20 10:01:00

+0

否 - 您应该能够在源流上使用CopyTo(http://msdn.microsoft.com/en-us/library/dd782932.aspx)进行复制数据转化为密码流 – Carsten 2012-03-20 10:07:36