Kleine Provisorische Passwort Abfrage mit MD5 Sicherung

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

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Kleine Provisorische Passwort Abfrage mit MD5 Sicherung

    Hey ich Brauche schon wieder Hilfe :) ,

    Ich Bin Gerade Dabei erstmal Fuer den Anfang etwas Kleines zu Erstellen, was mit einer Abfrage Geschuetzt sein soll bei der, der User vorher ein Passwort
    angibt.

    Ich verschluessle das Neue Passwort in einen MD5 Hash und Speichere es in eine (NOCH) Ungesicherte Textdatei
    Ich nutze diese Function um den Hash zu Generieren:

    VB.NET-Quellcode

    1. Private Function MD5(ByVal Content As String) As String
    2. Dim md5gen As New System.Security.Cryptography.MD5CryptoServiceProvider
    3. Dim ByteString() As Byte = System.Text.Encoding.ASCII.GetBytes(Content)
    4. ByteString = md5gen.ComputeHash(ByteString)
    5. Dim FinalString As String = Nothing
    6. For Each bt As Byte In ByteString
    7. FinalString &= bt.ToString("x2")
    8. Next
    9. Return FinalString
    10. End Function


    Das ganze Funktioniert auch Einwandfrei nur die Abfrage leider nicht....

    Wenn man Nun sein Vorher Gesetztes Passwort nach einem Programm Neustart eingeben soll,
    wird die Eingabe der Textbox1.Text wieder Verschluesselt und der Hash wird mit dem in der Datei verglichen

    Nun sagt er mir aber immer Falsches Passwort die Abfrage mache ich so:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim Hash As String = File.ReadAllText(AppData + "\.CodeSnap\.settings\crypt.csn")
    3. Dim GeneratedHash As String
    4. GeneratedHash = MD5(TextBox1.Text) 'Hier wird die Function von oben Genutzt
    5. If GeneratedHash = Hash Then
    6. MessageBox.Show("Richtig")
    7. Else
    8. MessageBox.Show("Falsch")
    9. End If
    10. End Sub


    Ich habe mir den Hash auch Mal in einer MessageBox ausgeben Lassen und mit dem der Datei Verglichen... Kein Einziger Fehler. Alles Richtig

    PS: So wie ich es Vermute liegt der Fehler irgentwo beim If denn denn den GeneratedHash und den Hash habe ich mir schon Angeschaut und dort war Kein Fehler.

    Ich Hoffe ihr Koennt mir Helfen :), Danke.
    Begeisterter BF4 Spieler :D
    Also da das bei dir nur als Lernebene gilt und du damit nicht wirklich etwas schützen willst (zumindest hab ich das so verstanden), ist es nicht schlimm das man es knacken kann....
    Ich denke aber es ist immer von Vorteil zu wissen was man "besser" machen kann, also:
    MD5 ist nicht mehr sicher. Am besten ist gerade (meines Wissens nach) SHA-2 (SHA-1 reicht aber auch).
    Und da man dein Programm wieder dekompilieren kann (also den Quellcode "wiederherstellen" kann) kann man die Passwortabfrage umgehen
    Und da das ganze in Textdateien gespeichert ist, kann man einfach seinen eigenen MD5 Hash in die Datei schreiben und dann sein Passwort zu den Hash nutzen.

    Zum Problem:
    Am besten du Debugst den Code einfach Zeile für Zeile irgendwo wird sich der Fehler eingeschlichen haben. Hab leider gerade keinen Rechner zur Hand deshalb kann ich dir dabei nicht viel helfen.

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Eine kleine aber wichtige Frage:
    Was möchtest Du vor wem schützen?

    Präventiv solltest Du Dir das durchlesen:
    eigenes Programm PW Abfrage einbinden.
    frage zu obfuscator + vm
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Das Programm was ich damit "Ausschmuecken" will ist ein Programm um Code-Snippets zu Speichern, Oeffnen, Editieren und um Den Code von anderen Pc Nutzern die das Gleiche Benutzerkonto nutzen zu sichern,

    Hatte ich vor das Ganze Erstmal so provisorisch zu Sichern :)

    SHA1 oder MD5 ist mir da Momentan noch egal, aber sobald ich soweit bin werde ich auf jeden Fall zu SHA1 umschreiben.

    Also die Kurzfassung, Ich brauche das fuer ein Code-Snippet Programm um die Code-Schnipsel zu sichern.
    Begeisterter BF4 Spieler :D
    Also so wie ich das verstehe, sollen die Codeschnipsel nur für Dich lesbar sein und auch nicht von einem anderen Programm (z.B. Visual Studio) verwendet werden können.
    In diesem Fall würde es bei frage zu obfuscator + vm unter "Daten" fallen. Hier wäre dann eine Verschlüsselung angebrachter. Denn was bringt es, wenn das Programm nicht gestartet werden kann, wenn die Codeschnipsel trotzdem im Klartext auf der Platte liegen ;)
    Hier die Grundlagen dafür:
    AES Verschlüsselung
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Verschlüsseln und Autentifizieren
    Da ist alles erklärt, und auch ein paar praktische Hilfsklassen, und eine Umsetzung.

    Aber ich denke (arrogant wie ich bin) das ist zu anspruchsvoll, und richtig sicher brauchst/willst du auch garnet. Daher kommt für dich evtl. Einfache Methode um String zu verschlüsseln in Frage.

    Gangsterkrafter schrieb:

    ch habe noch nicht wirklich Viel ahnung von Verschluesslung

    Gangsterkrafter schrieb:

    verschluessle das Neue Passwort in einen MD5 Hash


    Dann lass dich zunächst lehren:
    Hashes sind keine Verschlüsselung

    Hashes sind Einwegfunktionen die dir eine (normalerweiße) eindeutige und nicht auf das Original rückführbare Darstellung eines Wertes liefern.
    Verschlüsselungen sind funktionen, die mit einem gemeinsamen Geheimnis einen Wert für andere unverständlich machen.

    Glücklicherweise bietet das .NET Framework mit dem System.Security.Cryptography-Namespace (relativ) einfach zu verwendende Funktionen um Hashes und Verschlüsselungen benutzen zu können. Grundvorraussetzung ist, das man weiß was man tut ;)
    Ich habe meinen Fehler schon grad gefunden jedoch Weiss ich nicht wie ich das behebe:

    Wenn ich den Break-Point auf die Zeile If GeneratedHash = Hash Then mache,
    hat GeneratedHash den wert 9cdfb439c7876e703e307864c9167a15, Das ist ja noch Richtig jetzt aber
    hat die Andere Variable Hash den wert 9cdfb439c7876e703e307864c9167a15 & vbCrLf

    Bedeutet er Schreibt eine Unnoetige Zeile in die Datei (vbCrLf), wie bekomme ich die daraus?
    Um die Datei zu Schreiben nutze ich Folgenden Code:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. If TextBox2.Text = "" Then
    3. Else
    4. If File.Exists(AppData + "\.CodeSnap\.settings\crypt.csn") Then
    5. Dim fi As System.IO.StreamWriter
    6. fi = My.Computer.FileSystem.OpenTextFileWriter(AppData + "\.CodeSnap\.settings\crypt.csn", True)
    7. fi.WriteLine(TextBox2.Text) ' In Textbox2.Text steht der Hash
    8. fi.Close()
    9. Me.Close()
    10. Else
    11. File.Create(AppData + "\.CodeSnap\.settings\crypt.csn").Dispose()
    12. Dim fi As System.IO.StreamWriter
    13. fi = My.Computer.FileSystem.OpenTextFileWriter(AppData + "\.CodeSnap\.settings\crypt.csn", True)
    14. fi.WriteLine(TextBox2.Text) ' In Textbox2.Text steht der Hash
    15. fi.Close()
    16. Me.Close()
    17. End If
    18. End If
    19. End Sub


    @EaranMaleasi ich Weiss das, habe mich dort nur etwas Verschrieben
    Begeisterter BF4 Spieler :D
    Lese ich Richtig dass String.Substring die Laenge haben will?
    Weil wenn der Hash dann mal etwas Groesser ist dann wird er Zerschnibbelt, wie gesagt ich muss nur dieses vbCrLf weg bekommen.


    VB.NET-Quellcode

    1. File.WriteAllText(AppData + "\.CodeSnap\.settings\crypt.csn", TextBox2.Text)


    Macht das ganze schon von alleine :)
    Begeisterter BF4 Spieler :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gangsterkrafter“ ()