Passwortverschlüsselung mit Problemen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Radinator.

    Passwortverschlüsselung mit Problemen

    Hallo,
    folgendes Beispiel versuche ich gerade auf meine Datenbank anzupassen.
    Ich möchte mit den im Link enthalten Beispiel Funktionen mein Passwort verschlüsseln, in die Datenbank speichern und wieder aus der Datenbank herausholen und entschlüsseln.

    msdn.microsoft.com/de-de/libra…ryptography.rijndael.aspx

    Das Datenbankfeld ist Ein BLOB Feld.

    Diesen Code verwende ich derzeit (Testweise) um das Passwort in die DB zu schreiben:

    VB.NET-Quellcode

    1. Using myRijndael = Rijndael.Create()
    2. ' Encrypt the string to an array of bytes.
    3. Dim encrypted As Byte() = EncryptStringToBytes(txtPassword.Password, myRijndael.Key, myRijndael.IV)
    4. cmd.CommandText = "INSERT INTO TEST (USERNAME, PASSWORD) VALUES ('Johannes', @PASSWORD)"
    5. cmd.Parameters.AddWithValue("@PASSWORD", encrypted)
    6. conn.Open()
    7. cmd.ExecuteNonQuery()
    8. conn.Close()
    9. End Using


    Das funktioniert soweit auch ohne Fehler.

    Wenn ich nun das Passwort wieder zurückschreiben möchte bekomme ich folgende Fehlermeldung: "zeichenabstände sind ungültig und können nicht entfernt werden."
    Mit folgendem Code versuche ich es aus der DB zu holen und zu entschlüsseln:

    VB.NET-Quellcode

    1. Dim rt As String
    2. Dim bt() As Byte
    3. cmd.CommandText = "SELECT PASSWORD FROM TEST"
    4. Try
    5. conn.Open()
    6. reader = cmd.ExecuteReader
    7. Do While reader.Read
    8. bt = reader("PASSWORD")
    9. Loop
    10. conn.Close()
    11. Catch ex As Exception
    12. MsgBox(ex.Message)
    13. conn.Close()
    14. End Try
    15. Using myRijndael = Rijndael.Create()
    16. rt = DecryptStringFromBytes(bt, myRijndael.Key, myRijndael.IV)
    17. MsgBox(rt)
    18. End Using


    Hat jemand eine Idee woran es liegen kann? ?(
    ich glaub du verstehst was falsch.
    Passworte werden niemals verschlüsselt. Passworte sind dazu da, um anderes zu verschlüsseln.

    Den von dir genannten Fehler kenne ich, der tritt auf, wenn man mit einem falschen Passwort, falschem Salt oder mit einem falschen IV etwas versucht zu entschlüsseln.

    aber vlt. gugge erstmal Verschlüsseln und Autentifizieren

    (PS: na, vlt. doch. vlt codest du ja einen Passwortmanager oder ein Admin-Tool. )
    Btw laut deinem code liest du ja alle Zeile aus, und auch in deiner Do-Schleife speicherst du ja nur den aktuellen wert in der byte-variable, also wenn du deinen code durchlaufen lässt, bleibt nach ende der schleife der letze Wert in deiner variable, den versuchst du dann zu entkrypten =>

    ErfinderDesRades schrieb:

    Den von dir genannten Fehler kenne ich, der tritt auf, wenn man mit einem falschen Passwort, falschem Salt oder mit einem falschen IV etwas versucht zu entschlüsseln.


    Nur so als Tipp an Rande: Wenn du eine Datenbank durchliest und SQL verwendest dann mach nicht SELECT <spalte> FROM <tabelle>" sondern "SELECT <spalte> FROM <tabelle> WHERE <variable> = '<wert>'"
    bzw wenn du wirklich alle durchlesen willstm dann mach in deine do-schleife eine bedingung rein: Wenn user ="Johannes" Dann bt = reader("Password") oder sowas

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell