这段代码的任何替代方法都知道字节数?

时间:2012-09-30 01:14:14

标签: c# encryption rijndaelmanaged cryptostream

好的,所以我有这个代码用于解密文件

    public static byte[] DecryptFile(string inputFile, string skey)
    {
        RijndaelManaged aes = new RijndaelManaged();

            byte[] key = ASCIIEncoding.UTF8.GetBytes(skey);

            using (FileStream fsCrypt = new FileStream(inputFile, FileMode.Open))
            {
                using (CryptoStream cs = 
    new CryptoStream(fsCrypt, aes.CreateDecryptor(key, key),
    CryptoStreamMode.Read))
                {
                    using (BinaryReader reader = new BinaryReader(cs))
                    {
                        byte[] str = reader.ReadBytes(Convert.ToInt32(cs.Length));
                        reader.Close();

                        cs.Close();

                        return (str);
                    }
                }
            }

        }
    }

现在我遇到了问题,我无法确定字节长度!我试过了

cs.Length

但它表示 Stream不支持搜索(类似于此) 我还尝试按

计算文件的字节数
File.ReadAllBytes(encrypted_file_path).Length

但它说该文件正在使用中......由于FileStream fsCrypt

,它确实在使用

同时我用一些大整数替换cs.Length以使其工作..比如1000000 ..不会导致任何异常的最大整数..它确实有效。

1 个答案:

答案 0 :(得分:4)

在解密整个文件之前,您无法知道长度。

因此,您需要从一个小数组开始,并在它变满时使其变大。

MemoryStream类正是这样做的;您只需cs.CopyTo()进入新的MemoryStream并调用ToArray()