Announcement

Collapse
No announcement yet.

Passwortproblem mit MD5

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Passwortproblem mit MD5

    Hallo,

    in einer MySQL-Datenbank habe ich ein mit MD5 "verschlüsseltes" Kennwort (unverschlüsselt funktioniert alles bestens).

    Ferner habe ich folgenden Code und dieser wird auch durchlaufen, was man eindeutig daran erkennt, dass die drei ECHOs angezeigt werden. Demnach stimmen das aus der DB stammende PW und das eingegebene also NICHT überein (sollten sie aber eigentlich).

    Wenn ich mir die beiden jedoch mit ECHO anzeigen lasse, steht in beiden derselbe Wert, nämlich '25d55ad283aa400af464c76d713c07ad'.

    Ich bin schon seit Stunden auf der Suche auf weiß nicht mehr weiter und dabei stammt das Script aus einem Lehrbuch

    Weiß jemand Rat?

    Code:
    if (md5($_POST['kwort']) != $result[1]['kwort'])
    {
       echo md5($_POST['kwort']); 
       echo '<br>';
       echo $result[1]['kwort']; 
       $meldung="Bitte kontrollieren Sie Ihr Kennwort";  
       return array(FALSE, $meldung);
    }
    Okay, ich habe auch woanders gelesen, man solle MD5 nicht mehr benutzen, auch wenn ich nicht verstanden habe, weshalb. Auch sollte doch ein unverschlüsselt gespeichertes PW keine Probleme machen, solange keiner meine Datenbank knackt, oder?

    Was ich aber echt nicht verstehe ist, da prüfe ich etwas mit IF auf Ungleichheit und innerhalb dessen wird mir angezeigt, dass beide Werte gleich sind

    Grüße, KarlF

  • #2
    MD5 verschlüsselt nicht, sondern hasht

    Nutze strcmp für den Vergleich
    Zuletzt editiert von Christian Marquardt; 19.02.2011, 21:09.
    Christian

    Comment


    • #3
      Originally posted by Christian Marquardt View Post
      MD5 verschlüsselt nicht, sondern hasht
      Der Code hilft nicht, er zeigt, dass 2 Varaiblen offenbar nicht stimmen

      sind die beiden Zeichenketten gleich lang?
      Deshalb hatte ich "verschlüsseln" geschrieben, darum geht es aber nicht. Auch wenn ich noch nicht verstanden habe, wieso man mit einem Algorithmus etwas erhalten kann, ohne es zurückzuverwandeln.

      Ich weiß, der Code zeigt, dass die beiden Variablen nicht gleich sind. Sie sind es aber bzw. mir ist es ein absolutes Rätsel, was da nicht gleich sein soll.

      Ich lasse mir ja beide Variablen ausgeben und in beiden steht dasselbe drin!

      Wie gesagt, grundsätzlich funktioniert mein Passwortschutz ja. Wenn ich das PW einfach als String in eine Tabelle schreibe und auslese. Wenn ich es aber mit md5($pw) reinschreibe, geht es nicht mehr. Das Datenbankfeld ist vom Typ binary(50).

      Comment


      • #4
        Nutze strcmp für den Vergleich



        Deshalb hatte ich "verschlüsseln" geschrieben, darum geht es aber nicht. Auch wenn ich noch nicht verstanden habe, wieso man mit einem Algorithmus etwas erhalten kann, ohne es zurückzuverwandeln.
        Das sollte nicht hindern, die richtige Terminologie zu nutzen
        http://de.wikipedia.org/wiki/Hashen
        Christian

        Comment


        • #5
          strcmp klappt auch nicht.

          so?
          Code:
          if strcmp(md5($_POST['kwort'], $result[1]['kwort']) != 0
          oder so?
          Code:
          if not strcmp(md5($_POST['kwort'], $result[1]['kwort'])
          Ich blick jetzt gar nichts mehr

          Das mit der Terminologie ist aber doch gar nicht das Problem (oder?). Ich hab zum allerersten Mal mit sowas zu tun und in meinem Lehrbuch steht nichts von hashen. Will mir das auch gern ansehen, aber eins nach dem anderen.

          Im Augenblick möchte ich die Funktion erst einmal nur nutzen.

          Comment


          • #6
            Sind beide gleich lang?
            Christian

            Comment


            • #7
              In beiden steht:
              25d55ad283aa400af464c76d713c07ad

              Was ursprünglich einfach nur als Passwort 12345678 war.

              Comment


              • #8
                Prüfe, ob beide gleich lang sind
                Christian

                Comment


                • #9
                  Nachdem die Abfrage mit strcmp

                  Code:
                  if strcmp(md5($_POST['kwort']), $result[1]['kwort']) != 0
                  nur zu einer Fehlermeldung im Browser geführt hat, die da lautete:

                  Parse error: syntax error, unexpected T_STRING, expecting '(' in G:\xampp_portable\xampp\htdocs\zugriffsschutz\cl_z ugriff.php on line 77

                  ...hab ich wieder mein altes IF genommen...

                  Code:
                  if (md5($_POST['kwort']) != $result[1]['kwort'])
                  ...und nun ergibt dieses wohl, dass die beiden doch gleich sind.

                  Ich versteh dennoch die Welt nicht mehr. Ich hab doch nichts geändert! Allerdings klappt das Einloggen dennoch nicht. Ohne den ganzen MD5-Kram funktioniert alles!

                  Ich teste jetzt erst mal, vielleicht guckst du ja nachher nochmal hier vorbei. Danke schonmal.

                  Comment


                  • #10
                    Also, zunächst muss ich mich korrigieren, der Fehler ist immer noch an derselben Stelle.

                    Aber: Die Länge der ersten Variablen ist 32, die der zweiten 50!

                    Die Ausgabe lautet (die Fragezeichen waren vorhin aber noch nicht da):

                    25d55ad283aa400af464c76d713c07ad
                    Länge: 32
                    25d55ad283aa400af464c76d713c07ad������������������
                    Länge: 50



                    Klar, das Tabellenfeld in der DB ist vom Typ binary(50). Wird es deshalb aufgefüllt? Soll ich es einfach auf 32 verkleinern? Aber ich denke, die Auffüllnullen (bei char zumindest, bei binary weiß ich es nicht) werden wieder entfernt, wenn man das Feld ausliest...

                    Comment


                    • #11
                      Warum ein Binärfeld und kein ganz normales Textfeld???

                      Wie das lautet, hängt von der DB ab, die du nutzt
                      Christian

                      Comment


                      • #12
                        Originally posted by Christian Marquardt View Post
                        Warum ein Binärfeld und kein ganz normales Textfeld???
                        Weil das so im Lehrbuch stand

                        Ich hab das binary(50) jetzt mal auf binary(32) geändert und schon funktioniert der Spaß! da md5 ja immer einen 32-Byte langen Wert erzeugt, passt das ja immer. Oder?

                        Wenn BINARY-Werte gespeichert werden, werden sie nach rechts hin mit dem Füllwert auf die gewünschte Länge aufgefüllt. Der Füllwert ist 0x00 (das Nullbyte). Beim Einfügen werden Werte nach rechts hin mit 0x00 aufgefüllt, und beim Auswählen werden am Ende stehende Nullbytes nicht entfernt
                        Wieder was gelernt!

                        Als nächstes änder ich das in char um, noch besser sicherlich in varchar, oder?

                        Comment


                        • #13
                          VARCHAR

                          Message-Digest Algorithm 5 (MD5) ist eine weit verbreitete kryptographische Hashfunktion, die aus einer beliebigen Nachricht einen 128-Bit-Hashwert (deutsch: Prüfsumme) erzeugt.


                          http://de.wikipedia.org/wiki/MD5
                          Christian

                          Comment


                          • #14
                            Danke schon mal für den Tipp, die Länge anzeigen zu lassen.

                            Sind 128 Bit nicht 128/8 = 16 Byte? Warum ist der erzeugte Wert dann 32 Zeichen lang? Ohje, das begreif ich nie.

                            Comment


                            • #15
                              Es hat keinen Sinn dir Links / Informationen zu kommen zu lassen, wenn du sie nicht auch liest

                              Die 128 Bit langen MD5-Hashes (englisch auch „message-digests“) werden normalerweise als 32-stellige Hexadezimalzahl notiert. Folgendes Beispiel zeigt eine 59 Byte lange ASCII-Eingabe und den zugehörigen MD5-Hash:
                              Wahrscheinlich würde sich dein Unverständnis für einige Dinge legen, wenn du etwas nachliest
                              Christian

                              Comment

                              Working...
                              X