Seite 1 von 2
Passwort speichern in mysql
Verfasst: 30.07.2008 21:10
von leopittoni
Hallo
Möchte ein neues mysql-Feld "forum_password" in der phpbb_forums.
Ein Passwort darf nicht zweimal vorkommen. Also theoretisch ein unique, nur kommt dann der Fehler, es hätte mehrere ' ' oder halt mehrere 0.
Wie soll ich das neue Feld einstellen? Was für eine Codierung, etc.
Ausserdem sollte das ganze verschlüsselt gespeichert werden...
Danke! Léo
PS: habe nicht viel Ahnung von mySQL...
Verfasst: 31.07.2008 13:20
von S2B
Das "nur einmal vorkommen" würde ich per PHP überprüfen. Zur Verschlüsselung würde ich - da das beim phpBB2 für die Benutzerpasswörter ebenfalls verwendet wird - MD5 nehmen. Wenn es sicherer sein soll, könntest du auch zu SHA-1 und/oder Passwörter mit einem Salt greifen, wobei das für die Benutzer noch wesentlich wichtiger sein sollte als für simple Foren-Passwörter.
Im Falle von MD5 wäre das dann VARCHAR(32), bei SHA-1 VARCHAR(40).
Verfasst: 31.07.2008 15:26
von leopittoni
Ok!
Wenn das Feld also als VARCHAR(32) ist, speichert es die Eingaben verschlüsselt?
Wie kann ich denn per PHP überprüfen (bei der Eingabe), obs den Eintrag schon gibt?
Oder: Wie kann ich durch PHP einen Zufallscode generieren lassen, der noch nicht in der DB vorhanden ist?
Danke!! Léo
Verfasst: 31.07.2008 15:31
von S2B
leopittoni hat geschrieben:Wenn das Feld also als VARCHAR(32) ist, speichert es die Eingaben verschlüsselt?
Nein, nur wenn du das Passwort per PHP verschlüsselst ([php:md5]) und dann in die Datenbank einfügst.
leopittoni hat geschrieben:Wie kann ich denn per PHP überprüfen (bei der Eingabe), obs den Eintrag schon gibt?
So grob:
Code: Alles auswählen
$sql = "SELECT forum_id
FROM phpbb_forums
WHERE forum_password = '" . md5($forum_password) . "'
AND forum_id <> $forum_id";
// ...
if ($row['forum_id'])
{
// Passwort wird bereits verwendet
}
Verfasst: 31.07.2008 22:39
von leopittoni
Gibt es nicht eine Funktion, mit der mysql automatisch bei Erstellen eines Datensatztes in einem Feln einen Zufalls-Code (zB. 5 stellig) generiert?
Oder muss man das auch über PHP machen?
Léo
Verfasst: 31.07.2008 23:02
von 4seven
sql ist erstmal doof und muss gefüttert werden
Verfasst: 01.08.2008 00:35
von S2B
Und für was einen Zufallscode? Soll das Passwort zufällig sein?
Links hierzu: [php:mt_rand], [php:uniqid], [php:md5], [php:substr]
Verfasst: 01.08.2008 13:28
von leopittoni
Es soll einen zB. 5stelligen Code sein, bestehend aus Buchstaben + Zahlen.
mit mt_rand kann man, soweit ich gesehen habe, nur Zahlencodes erstellen lassen.
Gruss, Léo
PS: Kann man eigentlich md5-verschlüsselte Codes wieder entschlüsseln?
Also wieder sichtbar machen?
Verfasst: 01.08.2008 13:44
von FCM
Geht ganz einfach, hab dir da ne Funktion geschrieben:
Code: Alles auswählen
function passgen($length) {
$str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$str = str_shuffle($str);
$password = substr($str, 0, $length);
return $password;
}
$passwort = passgen(10);
echo $passwort;
Das Passwort wird bestehend aus Zahlen sowie Klein- und Großbuchstaben generiert.
passgen(10) = Das Passwort ist 10-stellig
passgen(8) = Das Passwort ist 8-stellig
Verfasst: 01.08.2008 15:30
von Boecki91
MD5 ist ein Hash mit 32 Stellen, stele Ihn dir mal wie eine einfache Quersumme vor:
Quersumme von 45 = 4+5 = 9
Quersumme von 43897412634 = 4+3+8+9+7+4+1+2+6+3+4 = (kann sich ja jeder im Kopf ausrechnen)
Allerdings ist die Stellenanzahl immer gleich 32.
es geht von 0-9a-f pro stelle also 16 Möglichkeiten pro Stelle.
Insgesamt also 16^32 Möglichkeiten.
Man kann nicht auf das Ursprüngliche Passwort zurück rechnen, nehmen wir die 1. Quersumme von oben, 36 hätte genau die selbe Quersumme 81 auch usw.
Da der md5 Algorithmus aber ein bisschen komplizierter ist geht das nicht so leicht.
Für kurze Passwörter gibt es Tabellen wo man einfach hingeschrieben hat
23 = 61adef457241 was auch immer. Kennt man vielleicht aus verschiedenen Mathebüchern Winkel => Sinus)
Also mögöichst lange Passwörter verwenden, denn bei solchen Tabellen fängt man logischerweise bei den kurzenan, und bei den langen gibt es viel mehr Möglichkeiten.