【发布时间】:2015-03-13 04:59:18
【问题描述】:
我关注MSDN Example of Rijndael Encryption,只是我想加密并返回一个流。
以下不起作用。
没有抛出异常,但是单步执行代码后,返回值没有数据。
public static Stream EncryptStream(Stream plainStream, byte[] Key, byte[] IV)
{
var encrypted = new MemoryStream()
// Create an RijndaelManaged object
// with the specified key and IV.
using (RijndaelManaged rijAlg = new RijndaelManaged())
{
rijAlg.Key = Key;
rijAlg.IV = IV;
// Create a decrytor to perform the stream transform.
ICryptoTransform encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);
// Create the streams used for encryption.
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(plainStream);
}
msEncrypt.CopyTo(encrypted);
}
}
}
return encrypted;
}
我查看了documentation for the Stream.Writer class,认为它与不支持写入流有关。
我注意到有一个“对象”类型参数,所以我假设它会起作用……对吗?如果没有,我该怎么做?
顺便说一句,我将 FileStream 传递给它。单步执行代码,plainStream 确实包含数据。
【问题讨论】:
-
@AlexeiLevenkov 我没有问过“设置位置”。如果这就是解决方案所在,我不可能知道它与“设置位置”有关
-
@AlexeiLevenkov,它实际上并没有解决问题。如果您忽略 CopyTo() 调用并查看 msEncrypt(一个 Stream),它不包含数据。试试看。
-
@user919426 如果你在处理完
csEncrypt之后执行msEncrypt.CopyTo(encrypted);,仍然会给你带来问题吗? -
“plainStream.CopyTo(swEncrypt);”怎么样?告诉我这是否有效。
-
旁注 - 我不相信“它不会引发异常”,因为您正在关闭流而不是尝试复制。
标签: c# encryption stream rijndaelmanaged