Passwort speichern in mysql

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Passwort speichern in mysql

Beitrag 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...
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag 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).
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag 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
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag 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
}
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag 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
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Beitrag von 4seven »

sql ist erstmal doof und muss gefüttert werden
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag 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]
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag 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?
FCM
Mitglied
Beiträge: 1863
Registriert: 03.05.2006 14:47
Kontaktdaten:

Beitrag 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
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag 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.
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Antworten

Zurück zu „Coding & Technik“