/ / Aplikacja zamykająca FlushFinalBlock - vb.net, visual-studio-2008, kryptografia, cryptostream

Aplikacja zamykająca FlushFinalBlock - vb.net, visual-studio-2008, kryptografia, cryptostream

Używam CryptoStream do odszyfrowania zaszyfrowanego tekstu w mojej aplikacji. Ale kiedy dojdę do punktu, w którym spuszczę ostatni blok ze strumienia lub zamknę go (co powinno zrobić to samo), aplikacja się zamknie.

Nie ma komunikatu o błędzie, nic. Nawet w trybie debugowania po prostu się kończy. W Windows Event Viewer otrzymuję .NET Runtime version 2.0.50727.5485 - Fatal Execution Engine Error (000007FEECCD600A) (80131506). Jestem ukierunkowany na framework 2.0 z aplikacją.

Oto mój kod:

    Public Function DecryptData(ByVal encryptedtext As String) As String
Try
" Convert the encrypted text string to a byte array.
Dim encryptedBytes() As Byte = Convert.FromBase64String(encryptedtext)

" Create the stream.
Dim ms As New System.IO.MemoryStream
" Create the decoder to write to the stream.
Dim decStream As New CryptoStream(ms, TripleDes.CreateDecryptor(), System.Security.Cryptography.CryptoStreamMode.Write)

" Use the crypto stream to write the byte array to the stream.
decStream.Write(encryptedBytes, 0, encryptedBytes.Length)
decStream.FlushFinalBlock()

" Convert the plaintext stream to a string.
Return System.Text.Encoding.Unicode.GetString(ms.ToArray)
Catch ex As System.Security.Cryptography.CryptographicException
Return ""
End Try
End Function

Próbowałem wymienić decStream.FlushFinalBlock() z decStream.Close()i dostałem to samo. Kiedy go skomentuję, ciąg, który zwraca, zawiera tylko wielokrotność 8 znaków. Reszta, zatrzymana w tym ostatnim bloku, znika.

Więc próbuję zrozumieć, dlaczego chwytam ostatnistrumienia zamyka aplikację. Umieściłem punkt przerwania w miejscu źródłowym i użyłem F11, aby wejść do niego, ale zamknięcie jest natychmiastowe.

Używam VS 2008 na Windows 7 Professional 64 bit.

Odpowiedzi:

0 dla odpowiedzi № 1

"Użyj strumienia crypto, aby napisać tablicę bajtów do strumienia.

    decStream.Write(encryptedBytes, 0, encryptedBytes.Length)

OH MY ..... ostatni parametr> encrytedBytes.lengt <. Używałem go tak źle Teraz mój kod działa jak