Probleme beim vergleich von md5 checksummen

dark_ghost

Erfahrenes Mitglied
Hallo zusammen,

ich bin mir bewusst, dass es mehrere Beiträge zum Thema md5-checksummen gibt aber keines konnte mir so wirklich weiterhelfen. Deshalb stelle ich jetz nochmal eine konkrete Frage, vielleicht hab ich ja auch nur einen kleinen Fehler im Script.

Mein Ziel ist es die md5-Checksumme für ein Login zu verwenden, wo ich das Passwort des Users damit "verschlüsseln" möchte.


Mit diesem Script wird der Datenbank ein Test-User hinzugefügt:
PHP:
//Verbindung zur DB herstellen
$dbconnect = mysql_connect("xxx","xxx","xxx") OR die ("Keine Verbindung zur DB moeglich");
mysql_select_db("xxx") OR die ("Die Datenbank existiert nicht");

//Neuen Benutzer mit folgenden Eigenschaften der DB hinzufügen
$username = "Admin";
$userpw = "cfc";
$realname = "Andreas";
$email = "Admin@cfc.de";

//userpw verschlüsseln
$userpwkey = MD5('".$userpw."');

//Neuen User in der DB anlegen
$sql = mysql_query("INSERT INTO `users` (username, userpw, realname, email) VALUES ('$username', '$userpwkey', '$realname', '$email')");

//Verbindung zur DB beenden
mysql_close($dbconnect);
In der Datenbank steht nun:
-siehe angehängtes Bild (db.png)-


Über dieses Formular melden sich die Benutzer an:
PHP:
//Session starten
session_start ();

//Meldung wenn das Login fehlgeschlagen ist
if(isset ($_REQUEST["fehler"]))
{
    echo "Die Zugangsdaten sind nicht korrekt!<br />";
}

//Formular für das Login
echo "<form action=\"login.php\" method=\"post\">";
echo    "Username: <input type=\"text\" name=\"username\" size=\"20\"><br />";
echo    "Password: <input type=\"password\" name=\"userpw\" size=\"20\"><br />";
echo    "<input type=\"submit\" name=\"submit\" value=\"Join\"><br />";
echo "</form>";
Der eingegebene Username und das Password werden an das Script login.php übergeben, das die Werte prüft:
PHP:
// Session starten
session_start ();

//Übergabeparameter vom login_formu.php auslesen
$usernamein = $_REQUEST['username'];
$userpwin = $_REQUEST['userpw'];

//Übergebenes pw verschlüsseln um es mit verschlüsseltem pw aus db zu vergleichen
$userpwkey = MD5('".$userpwin."');

//Verbindung zur DB herstellen
$dbconnect = mysql_connect("xxx","xxx","xxx") OR die ("Keine Verbindung zur DB moeglich");
mysql_select_db("xxx") OR die ("Die Datenbank existiert nicht");


$sql = "SELECT * FROM `users` WHERE `username` = '".$usernamein."' AND `userpw` = '".$userpwkey."'";
$result = mysql_query($sql); 

$anz = mysql_num_rows($result);
if ($anz > '0')
{ 
  // Benutzerdaten in ein Array auslesen. 
  $data = mysql_fetch_array ($result); 

  // Sessionvariablen erstellen und registrieren 
  $_SESSION["user_id"] = $data["id"]; 
  $_SESSION["user_nickname"] = $data["username"]; 
  $_SESSION["user_realname"] = $data["realname"]; 

  header ("Location: intern.php"); 
} 
else 
{ 
  header ("Location: login_formu.php?fehler=1"); 
}

//Verbindung zur DB beenden
mysql_close($dbconnect);

Melde ich mich jetz mit Username: Admin und Password: cfc an, erhalte ich immer die Meldung das meine Benutzerdaten nicht stimmen.

Daraufhin habe ich das mit dem PW "verschlüsseln" mal eigens in beiden scripten versucht, bringt aber auch nichts. Ich hab mir auch mal das "verschlüsselte" PW ausgeben lassen wenn es vom Script in die DB eingetragen wird und dann nochmal wenn die Usereingabe "verschlüsselt" wird.

Beide male lautet das PW cfc aber ich erhalte nicht die selbe checksumme.
Das hab ich dann nochmal mit einem extra Script getestet, was diesen Vorgang bestätigt:
PHP:
$pw = "cfc";
$pw_key = MD5('".$pw."');
echo "Vorher-PW: " . $pw . "<br>Nacher-PW: " . $pw_key;

echo "<hr>";

$pw2 = "cfc";
$pw_key2 = MD5('".$pw2."');
echo "Vorher-PW2: " . $pw2 . "<br>Nacher-PW2: " . $pw_key2;
Normalerweise müsste ich beidesmal die selbe checksumme erhalten, so ist es aber leider nicht:

Das Ergebnis:
Code:
Vorher-PW: cfc
Nacher-PW: b07c8fbb5d354cabf993e6771c8226dc

Vorher-PW2: cfc
Nacher-PW2: 76492f82f5035cbfca6fb6ac54dc76b1

Ich weis jetz leider nicht wo da der Fehler sein soll, denn beidemale wird das selbe PW "verschlüsselt". Beim hinzufügen cfc und bei der eingabe übers formular cfc, welches dann verschlüsselt wird und mit der checksumme aus der db verglichen wird.

Für Tipps und Ratschläge bin ich euch dankbar.
Gruß
Andreas
 

Anhänge

  • 26153attachment.png
    26153attachment.png
    1,4 KB · Aufrufe: 11
du kannst die variable direkt in die md5-Funktion schreiben, also ohne MD5 '". und ."'


einfach ....

PHP:
  $userpwkey = MD5($userpw);

... und es sollte laufen ;)
 
Hallo Soyo,

oh man ich hatte schon die Befürchtung, dass es ein kleiner Fehler ist aber, dass es so eine lapalie ist, die aber enorme Auswirkungen hervorruft hätte ich nicht gedacht.

Ich danke dir für Deine Hilfe, das Login-System funktioniert jetz so wie es soll, es wird beidemale die gleiche MD5-Checksumme für das PW erzeugt.



Vielen Dank und beste Grüße
Andreas

p.s. Das Problem wurde gefunden, der Fehler behoben, Thread erledigt.
Aber könnte mir dennoch jemand erklären was denn der große Unterschied zwischen den zwei Schreibweisen ist und wieso es deswegen nicht funktioniert hat ?! Danke.

$userpwkey = MD5('".$userpw."');

$userpwkey = MD5($userpw);
 
Zuletzt bearbeitet:
Hallo,

dark_ghost hat gesagt.:
p.s. Das Problem wurde gefunden, der Fehler behoben, Thread erledigt.
Aber könnte mir dennoch jemand erklären was denn der große Unterschied zwischen den zwei Schreibweisen ist und wieso es deswegen nicht funktioniert hat ?! Danke.

$userpwkey = MD5('".$userpw."');

$userpwkey = MD5($userpw);
Erläutere doch mal, was der Ausdruck '".$userpw."' deiner Meinung nach bewirken soll. Vielleicht tritt ja dann der Aha-Effekt ein :) Wenn nicht: schau mal was echo '".$userpw."' ausgibt.

Grüße,
Matthias
 
Zurück