2012-09-30 62 views
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 

,但它說,流不支持查找(類似THT) 我也試圖通過

File.ReadAllBytes(encrypted_file_path).Length 

計算文件的字節,但它說,該文件是在使用中...它確實在使用,因爲FileStream fsCrypt

其間我用cs.Length代替了一些大的整數t o使它工作。像1000000 ..最大的整數不會導致任何異常..它的工作方式。

回答

4

在解密整個文件之前,您無法知道長度。

因此,您需要從一個小陣列開始,並在它變滿時使其變大。

MemoryStream這樣做,您可以將cs.CopyTo()轉換爲新的MemoryStream並撥打ToArray()

+0

等等,我以爲你可以爲該文件創建一個FileInfo對象並使用它的長度屬性。儘管這可能只是磁盤上的大小。老實說,我只是做一個字節列表,並在末尾調用ToArray(),如果它必須以數組形式。 –

+3

@BenjaminDangerJohnson:沒有密文長度≠明文長度。 – SLaks

+0

以及如果我這樣做流「CS」的位置會去到另一端,導致STR是null..and這是不允許的CryptoStream CS尋求.. 編輯:所以不是我沒有使用BinaryReader..and只需將byte [] str設置爲MemoryStream()。ToArray ..謝謝! –

相關問題