Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] md5-Fehler im Login-script

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] md5-Fehler im Login-script

    Hallo an Alle!
    Habe mich in den letzten Tagen durch unzählige Tutorials "gequält", um ein halbwegs vernünftiges Loginsystem mit vorheriger db-Registrierung zu erstellen - und das, sogar mit Erfolg.
    In einem 2. Schritt habe ich eine md5-Verschlüsselung bei der Registrierung eingebaut, welche ebenfalls funktioniert.
    Probleme bekomme ich aber jetzt, wenn ich im Login das Passwort verschlüsseln will, um es dem verschlüsselten Passwort in der db gegenüber zu stellen.
    Wahrscheinlich ein recht simpler Fehler - aber ich komme einfach nicht weiter.
    Somit bin ich für jede Hilfe dankbar.

    Hier das login.php :

    <?php

    $benutzer = strtolower($_POST['user']); //alle Buchstaben werden in kleine Buchstaben umgewandelt = o.k.
    $passwort = md5(trim($_POST['pass'])); //Verschlüsselung md5-Methode: "Daten werden nicht gefunden!"
    $loginbutton = $_POST['login'];

    if ($loginbutton)
    {
    if ($benutzer AND $passwort)
    {
    //connect to db
    $connect = mysql_connect("localhost","root","");
    mysql_select_db("logindata");

    $query = mysql_query("SELECT * FROM userdaten WHERE benutzer='$benutzer'");
    $num = mysql_num_rows($query);

    if ($num!=0)
    {
    WHILE ($row = mysql_fetch_assoc($query))
    {
    $dbbenutzer = $row['benutzer'];
    $dbpasswort = $row['passwort'];
    }

    if ($dbbenutzer==$benutzer AND $dbpasswort==$passwort)
    {
    echo "Login erfolgreich!";
    }
    else
    echo "Ihre Daten wurden nicht gefunden.";
    }
    else
    echo "Der angegebene Benutzer existiert nicht!";
    }
    else
    echo "Bitte alle Felder beschriften.";
    }
    ?>

  • #2
    Was soll das while?
    [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

    Kommentar


    • #3
      Da die Registrierung und das Login OHNE md5 richtig gut funktionieren, mache ich mir wenig Sorgen wegen des "while".
      So richtig hilfreich war diese Antwort wohl nicht.
      MfG. Nicky

      Kommentar


      • #4
        Ich habe dennoch den Hinweis mit dem "while" berücksichtigt und das script verändert. Resultat: Registrierung in db ohne md5-Schlüssel sowie Login ohne md5 - läuft erfolgreich.
        Registrierung in db mit md5-Schlüssel sowie Login mit md5 - hier werden die Daten nicht gefunden !?
        Ich denke, dass der Fehler in der Login-md5-Verschlüsselung zu suchen ist; - Aber WO ???

        Kommentar


        • #5
          Wenn du Code geändert hast, poste ihn hier rein.
          [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

          Kommentar


          • #6
            Hier das veränderte script mit einigen Anmerkungen:

            <?php

            $benutzer = strtolower($_POST['user']); //alle Buchstaben werden in kleine Buchstaben umgewandelt = o.k.
            $passwort = md5(trim($_POST['pass'])); //Verschlüsselung md5-Methode / Vermeidung von Leerzeichen
            $loginbutton = $_POST['login'];

            if ($loginbutton)
            {
            if ($benutzer AND $passwort)
            {
            //connect to db
            $connect = mysql_connect("localhost","root","");
            mysql_select_db("logindata");

            $query = mysql_query("SELECT * FROM userdaten WHERE benutzer='$benutzer'LIMIT 1");
            $num = mysql_num_rows($query);

            if ($num>0)
            {
            $row = mysql_fetch_assoc($query);
            $dbpasswort = $row['passwort'];

            // echo $dbpasswort; oder: echo $passwort; = Beide Verschlüsselungen sind identisch !

            if ($dbpasswort==$passwort)
            {
            echo "Login erfolgreich!";
            }
            else
            echo "Ihre Daten wurden nicht gefunden."; // obwohl beide Passwörter übereinstimmen, wird dieses echo ausgegeben.
            }
            else
            echo "Der angegebene Benutzer existiert nicht!";
            }
            else
            echo "Bitte alle Felder beschriften.";
            }
            ?>

            Kommentar


            • #7
              Gib dir mal beide Passwörter mit [MAN]var_dump[/MAN] aus, damit du auch wirklich siehst ob die gleich sind (Gleiche Anzahl Zeichen?)
              Der Code sieht für mich richtig aus, wenn du sagst, dass die beiden Passwörter an der Stelle identisch sind...
              War der Beitrag hilfreich? Dann Bedank dich mit einem klick auf .

              Kommentar


              • #8
                Hallo Dreamwatcher,
                habe Deinen Rat befolgt und über var_dump die Zeichenfolgen anzeigen lassen; - und siehe da, sie sind tatsächlich unterschiedlich !
                $dbpasswort: string(25) "81dc9bdb52d04dc20036dbd83"
                $passwort: string(32) "81dc9bdb52d04dc20036dbd8313ed055"
                (Bei der ersten Überprüfung hätte ich die Zeilen einfach nur zu Ende lesen müssen !)
                An dieser Stelle noch einmal herzlichen Dank für Deinen Hinweis.
                Wie kann ich den Fehler aber nun beheben ?

                MfG. Nicky

                Kommentar


                • #9
                  Kleiner Nachtrag an Dreamwatcher:

                  Die 25 Zeichen der db haben mir zu denken gegeben - na klar, hier waren maximal ja auch nur 25 Zeichen eingestellt. Habe nun die Einstellung auf 40 Zeichen erhöht und nochmals alles durchlaufen lassen -
                  und siehe da - login erfolgreich !

                  Kleine Ursache, große Wirkung ! - nochmals herzlichen Dank.

                  MfG. Nicky

                  Kommentar


                  • #10
                    Es reichen auch 32 Zeichen. Ein md5 Wert ist immer 32 Zeichen lang.
                    War der Beitrag hilfreich? Dann Bedank dich mit einem klick auf .

                    Kommentar


                    • #11
                      [MAN]md5[/MAN] ist aber auch veraltet für die Passwortspeicherung. Auch wenn die tausend Tutorials einem da immer noch etwas anderes erzählen.
                      Nutze stattdessen lieber [MAN]password_hash[/MAN].
                      War der Beitrag hilfreich? Dann Bedank dich mit einem klick auf .

                      Kommentar


                      • #12
                        Herzlichen Dank an alle, die mir ein Stück weit geholfen haben.

                        MfG. Nicky

                        Kommentar

                        Lädt...
                        X