• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Hashs und so...

Jimj

New member
Hey ihr PHP-Suchtiiis :DDD

Ich habe eine Frage [!!] :)

Ich wollte ein Login- und Registerscript programmieren & mein bisheriger Code sieht so aus:

Register:
PHP:
$wdh = $_POST['wdh'];
$nick = mysql_real_escape_string($_POST['nick']);
$pw = sha1($_POST['pw']);
$wdh = sha1($_POST['wdh']);
$nick = trim($nick)
$pw = trim($pw);
$wdh = trim($wdh);

// Bla Bla Bla... Unnötig :DDD

$sql = "INSERT INTO users (username, password ) VALUES ('$nick', '$pw');";
$result = mysql_query($sql);
if ($result) {
echo '<p>Registrierung erfolgreich, <b>'.htmlspecialchars($nick).'</b>!<br>Jetzt musst du dich nur noch <b>einloggen</b>.</p>';
} else {
echo "<p>Registrierung <b>nicht</b> erfolgreich!</p>";
}

Login:
PHP:
$nick = htmlspecialchars($_POST['nick']);
$password = sha1($_POST['password']);
$sql = "SELECT * FROM users WHERE username = '".$nick."' AND password = '".$password."';";
$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);
if ($row["username"] == $nick && $row["password"] == $password) {
$_SESSION['username'] = htmlspecialchars($row['username']);
echo "Login erfolgt!";
} else {
echo "Login fehlgeschlagen! :D";
}

Ausgabe des Usernames:
PHP:
echo htmlspecialchars($row['username']);
// Oder...
echo htmlspecialchars($_SESSION['username']);


Irgendwie klappt etwas nicht, denn:
- Das gehashte Passwort, was in der Datenbank steht, das gleicht NICHT dem, der beim Login entsteht [Gleiches Passwort!!!].
- Der Datensatz wird in der Datenbank nicht gefunden.

Ich danke euch jetzt schonmal für eure Hilfe [!!] ;D
 
Ich seh' jetzt keinen gravierenden Fehler (ist nur nicht besonders leserlich, elegant, etc.). Der Sha1-Hash eines Strings ist immer eindeutig - das Problem muss woanders liegen (ev. in der DB-Struktur).
 
wenn das DB-Feld zu kurz ist, wird der hash-Wert abgeschnitten und ist dann nicht mehr identisch/auffindbar.
 
Hey,
mein Passwortfeld in der Datenbank sieht so aus:
password VARCHAR(250)

Was kann ich denn sonst noch tun?
Ich denke mal, dass 250 Zeichen dafür reichen.

.....

:(
 
wo liegen denn die Unterschiede zwischen den Hashs in der DB und denen von PHP?

abgesehen davon würde ich den Vergleich auf der Datenbank machen.
Code:
SELECT COUNT(*) FROM users WHERE username = ? AND password = ?
 
Zuletzt bearbeitet:
Das sind ganz verschiedene Strings.

Was ist das und wie soll ich das anwenden?
PHP:
SELECT COUNT(*) FROM users WHERE username = ? AND password = ?
 
Zuletzt bearbeitet:
Was soll ich denn bei
password = ?
hinmachen?
Bei dem Fragezeichen...

Und was ist dieses
COUNT(*)
?
 
Hast Du denn überall die gleiche Kodierung verwendet (z.B. durchgängig UTF-8) und funktioniert das Skript nur bei Passwörter mit Umlauten, Sonderzeichen oder anderen diakritischen Zeichen nicht richtig? Oder passiert das auch bei einfachen Passworten, wie z.B. abc oder 123?
 
Ah, ok. :)

@Albu
Wo denn?
Wie kann ich das einstellen?


Ich teste das mal schnell bei anderen Passwörtern aus...
 
Hmmm...
Jetzt habe ich ein neues Problem bein Login, denn er erkennt nicht, dass der Login-Name gleich, wie in der Datenbank ist.

Hilft mir bitte. :/
 
Zuletzt bearbeitet:
Das sind einfach zu wenig Informationen, um wirklich gut zu helfen. Du solltest hald einfach mal in dei DB schauen, was da wirklich reingeschrieben wurde.

PS: warum machst du eigentlich die ganzen trim()s?
 
Die trim()s, um unnötige Leerzeichen zu entfernen.
Register:
Ich gebe als Benutzernamen löl"' an.
Dann:
PHP:
$nick = mysql_real_escape_string($nick);
Gespeichert wird löl\"\'.
Login:
Ich gebe als Benutzernamen wieder löl"' an.
Dann:
PHP:
$nick = trim(mysql_real_escape_string($_POST['nick']));
Nick = Benutzername
Es scheitert am Benutzernamen.
 
Und wie kann ich das jetzt beheben, das Problem?
Indem Du aktiv wirst und eingrenzt, wo die Unterschiede herkommen.
Funktioniert es denn mit vernünftigen Namen (also Hans oder Lutz, oder Meier, usw.) oder verweigert es dort auch seinen Dienst?
Und was ist mit Müller, geht das auch oder geht nur lol"' aber nicht löl"' ?

Wir können Dir nicht viel helfen, wenn Du nicht mitarbeitest. Du behauptest es geht gar nicht, lieferst aber nur ein sehr fragwürdiges Beispiel mit Umlauten und Sonderzeichen, ob es sich auf diesen einen Sonderfall eingrenzt oder ob es wirklich ein grundlegendes Problem ist, können wir mit diesen Informationen überhaupt nicht erkennen.
 
Hab' gegoogelt, doch ich finde keine passende Antwort, die Magic Quotes abzuschalten.
1 = On
0 = Off
Wie kann ich das denn auf 0 setzen, ohne es in jedem Script, bei jeder Variableneu so setzen zu müssen?
Also ich will sie permanent abschalten.
 
Zurück
Oben