No estoy seguro de qué está pasando aquí. Mi aplicación es el cifrado de archivos correctamente y sin problema, pero está lanzando una IndexOutOfRangeException cuando se trata de descifrar el mismo archivo ...Índice fuera de rango al descifrar un archivo
Aquí está mi código:
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
El error aparece en la línea Stream.Close()
.
que han aplicado el mismo código en otro lugar y que no tiene ningún problema ...
Aquí está mi seguimiento de la pila:
System.IndexOutOfRangeException fue capturado mensaje = "Índice fuera de los límites de la matriz ".
Fuente = "mscorlib" StackTrace: en System.Security.Cryptography.RijndaelManagedTransform.DecryptData (byte [] INPUTBUFFER, Int32 inputOffset, Int32 inputCount, Byte [] & OutputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean flast) en System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock (byte [] INPUTBUFFER, Int32 inputOffset, Int32 inputCount) en System.Security.Cryptography.CryptoStream.FlushFinalBlock() en System.Security.Cryptography.CryptoStream.Dispose (Boolean desechando) en Sys tem.IO.Stream.Close() en Crypt.EncryptDecrypt (acción de las cuerdas, cuerdas INFILE, Cadena OUTFILE) en D: \ Desarrollo \ Projects \ Web \ WebSite1 \ App_Code \ Crypt.vb: Línea 34 InnerException:
Cualquier ayuda será muy apreciada.
EDIT 1 Después del comentario de aaz, que revisó y se sustituye
Stream = New CryptoStream(FSOut, Rij.CreateDecryptor(Key, IV), CryptoStreamMode.Write)
con
Stream = New CryptoStream(FSIn, Rij.CreateDecryptor(Key, IV), CryptoStreamMode.Write)
aquí está el resultado Seguimiento de la pila:
System.IndexOutOfRangeException fue capturado Mensaje = "Índice w como fuera de los límites de la matriz ". Fuente = "mscorlib" StackTrace: en System.Security.Cryptography.RijndaelManagedTransform.DecryptData (Byte []> INPUTBUFFER, Int32 inputOffset, Int32 inputCount, Byte [] & OutputBuffer, Int32> outputOffset, PaddingMode paddingMode, Boolean flast) en System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock (Byte []> inputBuffer, Int32 inputOffset, Int32 inputCount) en System.Security.Cryptography.CryptoStream.FlushFinalBlock() en System.Security.Cryptography.CryptoStream.Dispose (Boolean disposing) en System.IO.Stream.Close() en Crypt.EncryptDecrypt (String Action, String InFile, String OutFile) en> D: \ Development \ Projects \ Web \ WebSite1 \ App_Code \ Crypt.VB: línea 34 InnerException:
Me parece que es el mismo error ...
FIN EDIT 1
¿El código está completo? En realidad, no copia los datos de 'FSIn' a' Stream'. – aaz
Esto es lo que me confunde ... Funciona sin problemas en otra aplicación donde lo he usado. Sin embargo, soy bastante nuevo en encriptación, así que estoy retocando aquí y allá. – Ortund