从内存流复制到文件流失败

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;
}