Система.Безопасность.Криптография.Исключение CryptographicException: «Неверные данные. «тройное шифрование DES vb.net ms доступ

#vb.net #ms-access #encryption #tripledes

Вопрос:

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

 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()
 

Существует несколько строк данных, которые необходимо извлечь и отобразить в представлении datagridview(DGVSV). Каждый раз, когда я запускаю эту функцию выше, она показывает эту систему ошибок.Безопасность.Криптография.Исключение CryptographicException: «Неверные данные».

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

Комментарии:

1. Где ИМЕННО возникает исключение? Какие данные используются в настоящее время?

2. исключение возникает именно тогда, когда оно расшифровывает данные из базы данных. В принципе, я мог бы зашифровать данные, но не могу расшифровать. Исключение было вызвано FlushFinalBlock() при расшифровке данных из базы данных

3. Где та часть, в которой вы устанавливаете значения Key и IV для обоих преобразований? Создание шифраторов и дешифраторов таким образом генерирует разные Key IV значения и при каждом их вызове. Смотрите, например, это и это .

4. Если вы пытаетесь расшифровать, разве вы не должны читать с CryptoStream него, а не писать в него? Это риторический вопрос. Да, вы должны были бы читать из него, но вы этого не делаете. Я предлагаю вам провести некоторое исследование о том, как расшифровать данные, потому что это не так.

5. И… Создавайте потоки в Using ... End Using блоках.