从内存流复制到文件流失败
Copying from memory stream to File Stream fails
我正在尝试将内存流复制到文件流。我注意到解密时输出的 exe 已损坏。我确定解密功能没有问题。这是代码
private MemoryStream My_Encrypt(Stream inputFile)
{
//FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);
MemoryStream fsCrypt = new MemoryStream();
RijndaelManaged RMCrypto = new RijndaelManaged();
CryptoStream cs = new CryptoStream(fsCrypt, RMCrypto.CreateEncryptor(key, key), CryptoStreamMode.Write);
int data;
while ((data = inputFile.ReadByte()) != -1)
cs.WriteByte((byte)data);
inputFile.Flush();
return fsCrypt;
}
MemoryStream ms = My_Encrypt(bundleStream);
ms.Seek(0, SeekOrigin.Begin);
FileStream atest = new FileStream("c:\Somefile.exe",FileMode.Create);
ms.Seek(0, SeekOrigin.Begin);
ms.CopyTo(atest);
atest.Close();
更多详情:
我说内存流方法不起作用的原因是因为在 My_Encrypt
方法中,如果我用 FileStream 而不是 Memory Stream 替换 fsCrypt 并在方法结束时关闭 fsCrypt,然后重新打开保存的文件并写入它到另一个它有效的文件。我的问题是为什么内存流方法不起作用。
我相信你必须在 CryptoStream 上调用 FlushFinalBlock。
private MemoryStream My_Encrypt(Stream inputFile)
{
//FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);
MemoryStream fsCrypt = new MemoryStream();
RijndaelManaged RMCrypto = new RijndaelManaged();
CryptoStream cs = new CryptoStream(fsCrypt, RMCrypto.CreateEncryptor(key, key), CryptoStreamMode.Write);
int data;
while ((data = inputFile.ReadByte()) != -1)
cs.WriteByte((byte)data);
cs.FlushFinalBlock();
return fsCrypt;
}
我正在尝试将内存流复制到文件流。我注意到解密时输出的 exe 已损坏。我确定解密功能没有问题。这是代码
private MemoryStream My_Encrypt(Stream inputFile)
{
//FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);
MemoryStream fsCrypt = new MemoryStream();
RijndaelManaged RMCrypto = new RijndaelManaged();
CryptoStream cs = new CryptoStream(fsCrypt, RMCrypto.CreateEncryptor(key, key), CryptoStreamMode.Write);
int data;
while ((data = inputFile.ReadByte()) != -1)
cs.WriteByte((byte)data);
inputFile.Flush();
return fsCrypt;
}
MemoryStream ms = My_Encrypt(bundleStream);
ms.Seek(0, SeekOrigin.Begin);
FileStream atest = new FileStream("c:\Somefile.exe",FileMode.Create);
ms.Seek(0, SeekOrigin.Begin);
ms.CopyTo(atest);
atest.Close();
更多详情:
我说内存流方法不起作用的原因是因为在 My_Encrypt
方法中,如果我用 FileStream 而不是 Memory Stream 替换 fsCrypt 并在方法结束时关闭 fsCrypt,然后重新打开保存的文件并写入它到另一个它有效的文件。我的问题是为什么内存流方法不起作用。
我相信你必须在 CryptoStream 上调用 FlushFinalBlock。
private MemoryStream My_Encrypt(Stream inputFile)
{
//FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);
MemoryStream fsCrypt = new MemoryStream();
RijndaelManaged RMCrypto = new RijndaelManaged();
CryptoStream cs = new CryptoStream(fsCrypt, RMCrypto.CreateEncryptor(key, key), CryptoStreamMode.Write);
int data;
while ((data = inputFile.ReadByte()) != -1)
cs.WriteByte((byte)data);
cs.FlushFinalBlock();
return fsCrypt;
}