0

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

    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

但它说流不支持寻找(类似的东西)我也尝试通过计算文件的字节数

File.ReadAllBytes(encrypted_file_path).Length

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

与此同时,我cs.Length用一些大整数替换了它以使其工作..比如 1000000..不会导致任何异常的最大整数..它确实以这种方式工作。

4

1 回答 1

4

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

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

MemoryStream班级就是这样做的;你可以cs.CopyTo()进入一个新的 MemoryStream 并调用ToArray().

于 2012-09-30T01:19:10.630 回答