2

CryptoStreamアプリで暗号化されたテキストを復号化するために使用しています。しかし、ストリームから最後のブロックをフラッシュするか、それを閉じる (同じことを行う必要があります) ところまで来ると、アプリは閉じます。

エラーメッセージはありません。デバッグモードでもそのまま終了。Windows イベント ビューアーでは、.NET Runtime version 2.0.50727.5485 - Fatal Execution Engine Error (000007FEECCD600A) (80131506). アプリでフレームワーク 2.0 をターゲットにしています。

これが私のコードです:

    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

に置き換えdecStream.FlushFinalBlock()てみましdecStream.Close()たが、同じ結果になりました。コメントアウトすると、返される文字列には 8 文字の倍数しか含まれません。その最後のブロックに詰まった残りは消えます。

だから私は、最後のストリームを取得するとアプリケーションがシャットダウンする理由を理解しようとしています。ソースの場所にブレークポイントを設定し、F11 キーを使用してそこにステップ インしましたが、シャットダウンはすぐに行われます。

Windows 7 Professional 64 ビットで VS 2008 を使用しています。

4

1 に答える 1

0

' 暗号ストリームを使用して、バイト配列をストリームに書き込みます。

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

OH MY..... 最後のパラメータ >encrytedBytes.lengt<. 私はそれをすっごく間違って使用していました 今、私のコードは次のように機能しています

于 2016-02-06T18:00:04.343 に答える