Hi,
nachdem ich beim Abspeichern keine Exception ausgelöst habe, gehe ich davon aus, dass der mögliche Fehler keinen Fehler auslöst.
Ich habe eine Access07_Db. Die Columne hat den Datentyp:Text und weist einen Größe von 255 Zeichen auf.
Die Verschlüsselung:Try
conn.Open()
Dim com As New OleDbCommand("SELECT * FROM tbluser ORDER BY UserID ASC", _
conn)
Dim da As New OleDbDataAdapter(com)
Dim ds As New DataSet()
da.Fill(ds, "tbluser")
Dim dt As DataTable = ds.Tables("tbluser")
Dim cb As New OleDbCommandBuilder(da)
'Sicher ist sicher!
If TextBox1.Text <> TextBox2.Text Then
Dim result As Windows.Forms.DialogResult
result = MessageBox.Show("Die eingegebenen Passwörter sind nicht" & _
"ident!" & vbCrLf & _
"", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
TextBox1.Text = ""
TextBox2.Text = ""
TextBox1.Focus()
Else
Dim rd As New RijndaelManaged
Dim md5 As New MD5CryptoServiceProvider
Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes( _
TextBox2.Text))
md5.Clear()
rd.Key = key
rd.GenerateIV()
Dim iv() As Byte = rd.IV
Dim ms As New MemoryStream
ms.Write(iv, 0, iv.Length)
Dim cs As New CryptoStream(ms, rd.CreateEncryptor, _
CryptoStreamMode.Write)
Dim encdata() As Byte = ms.ToArray()
Dim dr As DataRow = dt.Rows(0)
dt.Rows(0)("Passwort") = CStr(Convert.ToBase64String(encdata))
da.Update(dt)
MessageBox.Show("Verschlüsselung war erfolgreich", _
"Hinweis", MessageBoxButtons.OK, MessageBoxIcon.Information)
Me.Dispose()
Me.Close()
End If
Catch sqlExc As Exception
MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
If conn.State = ConnectionState.Open Then conn.Close()
End Try Mir ist klar, dass selbst bei gleichen Passwörtern immer ein neuer Algo generiert wird. Der nachfolgende String dient nur als Ergänzung zur möglichen Problembehebung 'lz0llnbFHnyvyIdoPXyxFw=='
Und nun die Entschlüsselung mit Korrektur:conn.Open()
Dim com As New OleDbCommand( _
("SELECT * FROM tbluser ORDER BY UserID ASC"), conn)
Dim dr As OleDbDataReader = com.ExecuteReader()
dr.Read()
myEnCrypt = CStr(dr!passwort)
dr.Close()
MessageBox.Show(CStr(myEnCrypt)) 'mit DB-Eintrag ident!
'lz0llnbFHnyvyIdoPXyxFw==
Dim rd As New RijndaelManaged
Dim rijndaelIvLength As Integer = 16
Dim md5 As New MD5CryptoServiceProvider
Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(TextBox1.Text))
md5.Clear()
Dim encdata() As Byte = Convert.FromBase64String(myEnCrypt)
Dim ms As New MemoryStream(encdata)
Dim iv(15) As Byte
ms.Read(iv, 0, rijndaelIvLength)
rd.IV = iv
rd.Key = key
Dim cs As New CryptoStream(ms, rd.CreateDecryptor, CryptoStreamMode.Read)
'Dim data(CInt(ms.Length - rijndaelIvLength)) As Byte
Dim data(CInt(ms.Length - rijndaelIvLength - 1)) As Byte
'Dim i As Integer = cs.Read(data, 0, data.Length) '<----
Dim i As Integer = cs.Read(data, 0, data.Length - rijndaelIvLength) Wie ich bereits angedeutet habe, bin ich interessierter Laie, zwecks Beschäftigung der grauen Zellen.
Danke und Grüße |