"We are back" « oc.at

mysql password()

XeroXs 20.08.2002 - 03:01 1587 20
Posts

XeroXs

Vereinsmitglied
doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10343
hab in einer tabelle einiges mit password() eingetragen damits verschlüsselt wird, möchts aber jetzt auslesen (was ja kein problem wäre) und in eine variable speichern.. (was auch kein problem wäre)..

auslesen will ichs natürlich so, das es nachher nicht mehr verschlüsselt ist.. und leider schaff ichs einfach nicht den richtigen syntax zusammenzubekommen.. hints ?

noledge

CWNE #540
Avatar
Registered: Apr 2001
Location: ::1
Posts: 6838
how encrypted passwords work :p

der sinn hinter einem verschlüsseltem passwort ist, es NICHT MEHR entschlüsseln zu können... ich denk die password-funktion wird den md5 drüberlaufen lassen (einwegverschlüsselung, nur verschlüsseln möglich). selbes erreichst mit der php-md5-funktion. das wird bei so ziemlich allen passwörtern angewandt, vor allem in der unix welt. du gibst ein passwort ein, er verschlüsselt es und es kann nie wieder (*) entschlüsselt werden.

stellt sich die frage: wie verwend ich das jetzt? der MD5-algorithmus ist so, dass er bei gleichem string IMMER die selbe folge von zeichen erzeugt. nur ein anderes zeichen erzeugt bereits einen völlig anderen hash. folglich: du nimmst ein passwort, verschlüsselst es, speicherst es. user gibt ein passwort ein, du lässt MD5 drüberlaufen, und vergleichst die _hashes_ miteinander. beispiel: das passwort "user" erzeugt den hash "0815". ein benutzer gibt als passwort "users" ein, hash wird "4711". du vergleichst die hashes, nicht ident, falsches passwort. benutzer gibt "user" ein, du erzeugst den hash "0815", hashes sind ident, passwort korrekt. die wahrscheinlichkeit, dass jemand ein passwort eingibt, das genau den selben hash erzeugt ist sehr klein, wenn auch nicht unmöglich.

(*) entschlüsselt direkt nicht, allerdings kann mittels brute force ein passwort gefunden werden, dass den selben hash hat.

tjo, kleiner ausflug in die einwegverschlüsselung :)

edit: du vergleichst dann beispielsweise $myrow[password] (aus der datenbank) mit md5($_POST["password"]) (aus dem formular)
Bearbeitet von noledge am 20.08.2002, 07:31

XeroXs

Vereinsmitglied
doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10343
dacht ich mir schon... argl

XeroXs

Vereinsmitglied
doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10343
ok folgendes... i hab ne tabelle wo die ganzen passwörter drinnen stehen.. weswegen ichs brauch.. i muss ein paar zeilen in an andern table kopiern.. dort wird mit md5 verschlüsselt.. jetzt is halt die frage ob das echt das selbe ist.. dann gehts sowiso..

weiß das wer genau?

funka

Legend
ex-prophet(down below)
Registered: Sep 2000
Location: Vienna / SF
Posts: 6131
select user (oder hier true oder konstante ;)) from users where password=PASSWORD('$pass') and user='$user'

so ca verwendets man dann bei sql (glaub ich zumindest ;) - $user und $pass vorher zu checken (also addslashes() etc kann nie schaden)

XeroXs

Vereinsmitglied
doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10343
des weiß i eh.. das prob is nur das des für die anwendung da ned geht..

XeroXs

Vereinsmitglied
doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10343
ok grad getestet .. bei md5(bla) kommt was andres raus alls bei password(bla)

:(

funka

Legend
ex-prophet(down below)
Registered: Sep 2000
Location: Vienna / SF
Posts: 6131
naja anwendung umbauen
oder verifizieren und dann das plaintext pass was er eingeben hat weiter verwenden

XeroXs

Vereinsmitglied
doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10343
wäre kein problem.. hier gehts aber um einträge die schon vorhanden sind.. kann ned einfach alle member löschen

funka

Legend
ex-prophet(down below)
Registered: Sep 2000
Location: Vienna / SF
Posts: 6131
wenn die eintraege mit gecrypteten passes vorhanden sind
siehe mein vorheriges pass

wenns um irgnedwelche groesseren aenderungen geht solltest das jeweilige script aufrufen sobald der user sich einlogt und sein plain text pass mal hergibt
aber denoch waer natuerlich eine umstrukturierung besser

XeroXs

Vereinsmitglied
doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10343
nachmal ganz langsam ;)

i muss von einer tabelle den user verschieben in a andre.. dort wird aber anders verschlüsselt !

noledge

CWNE #540
Avatar
Registered: Apr 2001
Location: ::1
Posts: 6838
jo, russische methode - "mitsniffen". wenn sich ein user erfolgreich einloggt, speicherst das passwort entweder plaintext oder so encrypted, wie du es brauchst, wo anders ab.

funka

Legend
ex-prophet(down below)
Registered: Sep 2000
Location: Vienna / SF
Posts: 6131
problem erklaert
problem geloest

hail to the interactivity of the al'mighty i.r.c. :P

bernhard

Little Overclocker
Registered: Feb 2001
Location: NÖ
Posts: 51
roundup: MySQL verwendet seinen eigenen, nicht sonderlich ausgefeilten[1, 2] Algorithmus. Ein patch[3] für John the Ripper[4] ist (ohne Gewähr und auf eigene Gefahr) verfügbar.

[1] <http://groups.google.com/groups?sel...p;output=gplain>
[2] <http://online.securityfocus.com/bid/1826>
[3] <http://goliath.darktech.org/code/john-mysql-v0.patch>
[4] <http://www.openwall.com/john/>

Jehul

Big d00d
Avatar
Registered: Nov 2000
Location: lnz
Posts: 295
du kannst ganz einfach de mysql-md5(password) funktion benutzen:
list($md5) = mysql_fetch_row(mysql_query("SELECT PASSWORD('das_passwort')"));
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz