Индекс выходит за пределы допустимого диапазона при расшифровке файла

Я действительно не понимаю, что здесь происходит. Мое приложение правильно и без проблем шифрует файлы, но выдает исключение IndexOutOfRangeException при попытке расшифровать тот же файл ...

Вот мой код:

Public Sub EncryptDecrypt(ByVal Action As String, ByVal InFile As String, ByVal OutFile As String)
    Try
        Dim Buffer(4096) As Byte
        Dim Stream As CryptoStream
        Dim Rij As New System.Security.Cryptography.RijndaelManaged
        Dim Key(), IV() As Byte

        FSIn = New FileStream(InFile, FileMode.Open, FileAccess.Read)
        FSOut = New FileStream(OutFile, FileMode.OpenOrCreate, FileAccess.Write)
        FSOut.SetLength(0)

        Key = CreateKey("p0Ju423KQY7h4D29Ml536jbX7gS2Q6Rtm87XvRttlKiZ")
        IV = CreateIV("p0Ju423KQY7h4D29Ml536jbX7gS2Q6Rtm87XvRttlKiZ")

        If Action = "E" Then
            Stream = New CryptoStream(FSOut, Rij.CreateEncryptor(Key, IV), CryptoStreamMode.Write)
        Else
            Stream = New CryptoStream(FSOut, Rij.CreateDecryptor(Key, IV), CryptoStreamMode.Write)
        End If

        Stream.Close()
        FSIn.Close()
        FSOut.Close()
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

Ошибка появляется в Stream.Close () строка.
Я применил тот же код в другом месте, и у него нет никаких проблем ...

Вот моя трассировка стека:

System.IndexOutOfRangeException было поймал Сообщение = "Индекс был вне границы массива "
Source = "mscorlib" StackTrace: в System.Security.Cryptography.RijndaelManagedTransform.DecryptData (Byte [] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte [] и outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast) в System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock (Byte [] inputBuffer, Int32 inputOffset, Int32 inputCount) в System.Security.Cryptography.CryptoStream.FlushFinalBlock () в System.Security.Cryptography.CryptoStream.Dispose (Boolean утилизация) в System.IO.Stream.Close () в Crypt.EncryptDecrypt (String Action, String InFile, String OutFile) в D: \ Development \ Projects \ Web \ WebSite1 \ App_Code \ Crypt.vb: строка 34 InnerException:

Мы будем благодарны за любую помощь.

РЕДАКТИРОВАТЬ 1 После комментария aaz я исправил и заменил

Stream = New CryptoStream(FSOut, Rij.CreateDecryptor(Key, IV), CryptoStreamMode.Write)

на

Stream = New CryptoStream(FSIn, Rij.CreateDecryptor(Key, IV), CryptoStreamMode.Write)

Вот полученная трассировка стека:

System.IndexOutOfRangeException было перехвачено Message = "Индекс вышел за пределы массива." Источник = "mscorlib" Трассировки стека: в System.Security.Cryptography.RijndaelManagedTransform.DecryptData (Byte []> inputBuffer, Int32 inputOffset, Int32 inputCount, Byte [] & outputBuffer, Int32> outputOffset, PaddingMode paddingMode, Boolean fLast) в System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock (Byte []> inputBuffer, Int32 inputOffset, Int32 inputCount) в System.Security.Cryptography.CryptoStream.FlushFinalBlock () в System.Security.Cryptography.CryptoStream.Dispose (логическое удаление) в System.IO.Stream.Close () в Crypt.EncryptDecrypt (String Action, String InFile, String OutFile) в> D: \ Development \ Projects \ Web \ WebSite1 \ App_Code \ Crypt.vb: строка 34 InnerException:

Мне кажется, что это та же ошибка ...

КОНЕЦ РЕДАКТИРОВАНИЯ 1

6
задан Ortund 16 February 2011 в 23:44
поделиться