Я действительно не уверен, что здесь происходит. Мое приложение шифрует файлы правильно и без проблем, но выдает исключение 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 ()
at System.Security.Cryptography.CryptoStream.Dispose (Boolean
утилизации)
в System.IO.Stream.Close ()
at Crypt.EncryptDecrypt (строковое действие, строковый InFile, строковый 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