#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
блоках.