System.Security.Cryptography.CryptographicException: «Неверные данные. ' Тройное шифрование DES vb.net ms access

Шифрование и дешифрование

Imports System.Security.Cryptography
Imports System.Text
Imports System.IO



Public Class EncDecCls

    Private tripleDES As New TripleDESCryptoServiceProvider

    'Public Sub New(_KEY As String)
    '    KeyStr = _KEY
    'End Sub

    'Private KeyValue As String
    'Public Property KeyStr() As String
    '    Get
    '        Return KeyValue
    '    End Get
    '    Set(value As String)
    '        KeyValue = value
    '    End Set
    'End Property

    Function Encryption(ByVal datafile As String) As String

        Dim input As Byte() = System.Text.Encoding.Unicode.GetBytes(datafile)

        Dim ms As New System.IO.MemoryStream
        Dim encstream As New CryptoStream(ms, tripleDES.CreateEncryptor(),
                      System.Security.Cryptography.CryptoStreamMode.Write)

        encstream.Write(input, 0, input.Length)

        encstream.FlushFinalBlock()

        Return Convert.ToBase64String(ms.ToArray)

    End Function

    Function Decryption(ByVal encryptedfile As String) As String

        Dim output() As Byte = System.Text.Encoding.Unicode.GetBytes(encryptedfile)

        Dim ms As New System.IO.MemoryStream
        Dim decstream As New CryptoStream(ms, tripleDES.CreateDecryptor(),
                     System.Security.Cryptography.CryptoStreamMode.Write)

        decstream.Write(output, 0, output.Length)

        decstream.FlushFinalBlock()

        Return System.Text.Encoding.Unicode.GetString(ms.ToArray)
    End Function
End Class

Код для извлечения данных из базы данных и их расшифровки, а затем для отображения в datagridview (DGVSV)

Dim cmd1 As New OleDbCommand("SELECT * FROM pwdmgr WHERE username = @uname", conn)
        cmd1.Parameters.Add("@uname", OleDbType.VarChar).Value = x
        conn.Open()
        dr = cmd1.ExecuteReader
        dr.Read()
        DGVSV.Rows.Add(dr.Item("id").ToString,
                           EncryptDecryptFiles.Decryption(dr.Item("email").ToString),
                                EncryptDecryptFiles.Decryption(dr.Item("pwd").ToString))
        
        conn.Close()

Необходимо извлечь несколько строк данных и отобразить их в представлении сетки данных (DGVSV). Каждый раз, когда я запускаю эту функцию выше, она показывает эту ошибку System.Security.Cryptography.CryptographicException: «Bad Data. '

Может ли кто-нибудь помочь мне в этом?


person Khohula Rhaj    schedule 19.03.2021    source источник
comment
Где ТОЧНО возникает исключение? Какие данные используются в данный момент?   -  person jmcilhinney    schedule 19.03.2021
comment
исключение выдается именно тогда, когда оно расшифровывает данные из базы данных. В принципе, я мог бы зашифровать данные, но не могу расшифровать. Исключение возникло в FlushFinalBlock() при расшифровке данных из базы данных   -  person Khohula Rhaj    schedule 19.03.2021
comment
Где та часть, где вы устанавливаете значения Key и IV для обоих преобразований? Создание шифраторов и дешифраторов таким образом генерирует разные значения Key и IV каждый раз, когда вы их вызываете. См. это и это Например.   -  person dr.null    schedule 19.03.2021
comment
Если вы пытаетесь расшифровать, разве вы не должны читать из CryptoStream, а не записывать в него? Это риторический вопрос. Да, вы должны читать из него, но это не так. Я предлагаю вам немного изучить, как расшифровывать данные, потому что это не так.   -  person jmcilhinney    schedule 19.03.2021
comment
И... Создайте потоки в Using ... End Using блоках.   -  person dr.null    schedule 19.03.2021
comment
@jmcilhinney Это работает так, это зависит от того, чем преобразования заполняют криптопоток.   -  person dr.null    schedule 19.03.2021
comment
я следил за учебником YouTube. У меня нет предварительных знаний о шифровании и дешифровании. Есть ли какие-либо предложения о том, как зашифровать и расшифровать данные в vb.net с помощью оконных форм?   -  person Khohula Rhaj    schedule 19.03.2021
comment
Dim output() As Byte = System.Text.Encoding.Unicode.GetBytes(encryptedfile) Dim ms As New System.IO.MemoryStream Using decstream As New CryptoStream(ms, tripleDES.CreateDecryptor(), System.Security.Cryptography.CryptoStreamMode.Write) decstream.Write(output, 0, output.Length) decstream.FlushFinalBlock() End Using Это что-то вроде этого?   -  person Khohula Rhaj    schedule 19.03.2021
comment
У меня нет предварительных знаний о шифровании и дешифровании. .. Вот почему я дал вам прочитать две статьи.   -  person dr.null    schedule 19.03.2021
comment
См. здесь   -  person Jimi    schedule 19.03.2021