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

しかし、 Streamはシークをサポートしていないと言っています(thtのようなもの)私もファイルのバイトを数えてみました

File.ReadAllBytes(encrypted_file_path).Length

しかし、それはファイルが使用中であると言っています...それはFileStreamfsCryptのために実際に使用されています

その間、私はcs.Lengthそれを機能させるためにいくつかの大きな整数に置き換えました..1000000のように..例外を引き起こさない最大の整数..それはそのように機能します。

4

1 に答える 1

4

ファイル全体を復号化するまで、長さを知ることはできません。

したがって、小さな配列から始めて、いっぱいになるにつれて大きくする必要があります。

MemoryStreamクラスはまさにそれを行います。cs.CopyTo()新しいMemoryStreamにアクセスして、を呼び出すことができますToArray()

于 2012-09-30T01:19:10.630 に答える