md5() ungereimheiten
-
kurz zur sache, ich betreibe ein eigenes forum (phpBB based) und möchte einige user berechtigen, auf einen seperaten webspace zugreifen zu dürfen. die authentifizierung soll durch kopieren des usernamens/password aus der forumtabelle in eine htpasswd mittels exteren script erfolgen.
nun das problem - die passwörter, die im htpasswd stehen müssten sehen gänzlich anders aus. zumindest laut htpasswd bzw htpasswd2
beispiel:
mysql> SELECT md5('sonntag') ergibt ac732dfd408accf0565da554f13aa657
dasselbe in php:
echo md5("sonntag") ergibt auch ac732dfd408accf0565da554f13aa657
die verwendung des linux commands:
> htpasswd -n -m Foo ergibt trotz md5 Foo:$apr1$QORH6/..$G4BcigwdB1ovpPozVp0P40
wo ist der fehler ? oder kann ich die md5() passwörter, die mein forum mittels php in sql tabelle schreibt nicht benutzen ? aber warum dann die option -m beim linux tool ?
-
Hi,
das liegt daran, dass Apache einen eigenen Algorithmus für MD5 hat. Du kannst dir diesen unter srclib/apr-util/crypto/apr_md5.c in den Apache sources anschauen.
-
mit anderen worten md5() ist nicht gleich md5() ?
also besteht keine chance die php-md5() passwörter aus der datenbank für meine .htaccess zu verwenden ?
-
Ist Salz vielelicht das Stichwort?
Wenn du mehrfach dasselbe Passwort in htpasswd schmeißt, wirst du sehen, dass immer was anderes rauskommt. Die Idee ist jene: Wenn zwei User dasselbe Passwort haben, ist auch deren MD5-kodierung dieselbe. Wenn du jetzt also ein User bist und siehst dass jemand anderes den gleichen MD5-Hash hat, weißt du sofort sein Passwort. Deswegen hängt man üblicherweise vor oder nach das Passwort noch eine zufällige Zeichenkette, welche dafür dann im Klartext dafür gespeichert wird. Um das Passwort zu überprüfen kann man dann das Salz vor das Passwort hängen, hashen und vergleichen, aber es ist nicht mehr direkt ersichtlich, welche Passwörter doppelt vorkommen.
Inwiefern der Algorithmus vom apache jetzt noch modifiziert ist kann ich leider nicht sagen.
-
TriPhoenix schrieb:
Inwiefern der Algorithmus vom apache jetzt noch modifiziert ist kann ich leider nicht sagen.
Dazu kann ich leider nichts sagen. Das war nur das Ergebnis einer Googlesuche vor ein paar Wochen
Aber Zeichen wie '$' und ähnliche Zeichen hab ich in MD5 Ausgaben noch nie gesehen...
-
Die $ kommen als Trennzeichen daher, das ist sozusagen das format der htpasswd-Datei, damit werden username, Algorithmus, Salz und Hash voneinander getrennt.
-
ok, das habe ich soweit halbwegs verstanden. bleibt noch die frage, ob und wie ich von den md5() passwörtern in das andere format komme
-
Wenn die Leute was am MD5-Algorithmus verändert haben (und danach klingt es in Quellcode und Netz) nur, indem du die md5-Funktion wegschmeißt und dir selber die apr-md5-Funktion ausm Apache implementierst. Wenn es Standard-MD5 ist, reicht es aus dem Apache-Passwortstring das Salz herauszugreifen, genauso wie der Apache es tut vor oder hinter das Passwort hängen und davon das MD5 berechnen. Der Apache scheint außerdem den resultierenden Wert nicht in Hexadezimal zu zeigen, sondern in einer anderen Kodierung (evtl. base64?)