php5 / Mysql 5 Fout vergelijking md5 password hash

Pagina: 1
Acties:
  • 155 views sinds 30-01-2008
  • Reageer

  • PainkillA
  • Registratie: Augustus 2004
  • Laatst online: 28-11 11:17
Ok ik heb al op forua gekeke en google gezocht maar word er echt niets wijzer van en toch maar eens hier gaan kijken.

Het probleem: ik heb een inlogscript dat via een klasse sentry.php de ingevoerde username en password vergelijkt met die uit de database samen met de group en enabled maar dat is niet belangrijk. Niets bijzonders hier. Ik heb een user admin aangemaakt met admin met het volgende sql insert statement:

INSERT INTO `cmsusers` VALUES (1,'admin',PASSWORD('admin'),1,'Mr','Admin',1);

Query voor tabel:

CREATE TABLE `cmsusers` (
`ID` int(4) unsigned NOT NULL auto_increment,
`user` varchar(20) default NULL,
`pass` varchar(20) default NULL,
`thegroup` int(4) default '10',
`firstname` varchar(20) default NULL,
`surname` varchar(20) default NULL,
`enabled` int(1) default '1',
PRIMARY KEY (`ID`)
) TYPE=MyISAM;

nu vergelijk ik in een php script de password met die uit de database. Hier gaat het dus fout.

ik heb de echo gecheckt van de $pass uit de volgende code die de waardes met die uit de database vergelijkt:

$getUser = $loginConnector->query("SELECT * FROM cmsusers WHERE user = '$user' AND pass = MD5('$pass') AND thegroup <= $group AND enabled = 1");

Dit geeft een andere hash waarde aan dan die van in de database. iemand enig id, want ik heb werkelijk alles al geprobeerd. heb ook al de MD5 fucntie gewisseld met de PASSWORD functie die weliswaar een andere hash gaf maar nog steeds niet de juiste.

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
de mysql PASSWORD functie doet niet hetzelfde als de MD5 functie.

mysql heeft volgens mij ook gewoon een MD5() functie. gebruik die eens

ik kan me trouwens niet voorstellen dat je dit niet kon vinden op internet. Je geeft zelf al aan de MD5 functie te gebruiken, en gebruikt daarnaast de PASSWORD() functie, en vind het raar dat ze niet matchen?

[ Voor 44% gewijzigd door BasieP op 22-05-2007 19:58 ]

This message was sent on 100% recyclable electrons.


  • RAJH
  • Registratie: Augustus 2001
  • Niet online
`pass` varchar(20) default NULL,

MD5 hashes zijn volgensmij 32 chars lang :)

//Edit
MD5 hashes (also termed message digests) are typically represented as a sequence of 32 hexadecimal digits

[ Voor 46% gewijzigd door RAJH op 22-05-2007 20:04 ]


  • user109731
  • Registratie: Maart 2004
  • Niet online
Bovendien:
... PASSWORD() should be used only to manage passwords for MySQL accounts.
Geen PASSWORD() gebruiken dus :)

edit: @hieronder:
PainkillA schreef op dinsdag 22 mei 2007 @ 20:04:
en sorry ik had ondertussen ook al de password field length naar 255 gezet naar nader bestuderen van de insert code.
Waarom 255? Logisch nadenken, een hash is 32 characters zoals al gezegd, dat doe je dus in een CHAR(32) ofzo :)

[ Voor 47% gewijzigd door user109731 op 22-05-2007 20:14 ]


  • PainkillA
  • Registratie: Augustus 2004
  • Laatst online: 28-11 11:17
Uiteraard had ik al eerder de md5 functie in sql gebruikt/geprobeerd maar door het steeds falen had ik eens PASSWORD geprobeerd uit wanhoop :P

en sorry ik had ondertussen ook al de password field length naar 255 gezet naar nader bestuderen van de insert code.

de PASSWORD functie bij SQL INSERT gaf:

*4ACFE3202A5FF5CF467898FC58AAB1D615029441

de MD5 functie bij SQL INSERT gaf

21232f297a57a5a743894a0e4a801fc3

Het php script gaf met de md5 via echo de volgende hash af van het converteren van invoer naar md5:

b148e7f41fdc3be4b14e8d17e068bbad

[ Voor 37% gewijzigd door PainkillA op 22-05-2007 20:08 ]


  • mocean
  • Registratie: November 2000
  • Laatst online: 25-11 11:02
Met die hashes kunnen we natuurlijk vrij weinig.

Ik heb zelf wel ervaring hiermee en het moet gewoon werken.

Je kan ook bij de insert en bij de inlogfunctie de MD5 functie van MySQL gebruiken evt.

Koop of verkoop je webshop: ecquisition.com


Verwijderd

r->query("SELECT * FROM cmsusers WHERE user = '$user' AND pass = MD5('$pass') AND thegroup <= $group AND

Waarom doe je SELECT * FROM? Ik durf te wedden dat je niet elk gegeven uit de DB nodig hebt, select alleen het veld id, scheelt een hoop I/O.

  • PainkillA
  • Registratie: Augustus 2004
  • Laatst online: 28-11 11:17
mocean schreef op dinsdag 22 mei 2007 @ 20:09:
Met die hashes kunnen we natuurlijk vrij weinig.

Ik heb zelf wel ervaring hiermee en het moet gewoon werken.

Je kan ook bij de insert en bij de inlogfunctie de MD5 functie van MySQL gebruiken evt.
de SQL insert code is gebruikt in phpmyadmin en hoe gebruik ik dan precies die mysql md5 functie in zowel de php script als in de phpmyadmin query?

de insert * from moet ik later nog fixen probeer het eerst basic aan de praat te krijgen

  • user109731
  • Registratie: Maart 2004
  • Niet online
PainkillA schreef op dinsdag 22 mei 2007 @ 20:23:
[...]
de SQL insert code is gebruikt in phpmyadmin en hoe gebruik ik dan precies die mysql md5 functie in zowel de php script als in de phpmyadmin query?
In de insert-query uit de TS PASSWORD() vervangen door MD5() zou genoeg moeten zijn... De select-query is goed.

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 30-11 15:16

krvabo

MATERIALISE!

Je insert een user met de PASSWORD-functie.
Dan controleer je of MD5(wachtwoord) hetzelfde is als de PASSWORD.

Wat denk je zelf dat er foutgaat?

Heel simpel op te lossen. OF je doet zowel je insert als je select met PASSWORD, OF je doet zowel je insert als je select met MD5.

PHP:
1
$getUser = $loginConnector->query("SELECT * FROM cmsusers WHERE user = '$user' AND pass = PASSWORD('$pass') AND thegroup <= $group AND enabled = 1");

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


  • Harm
  • Registratie: Mei 2002
  • Niet online
Waarbij ik nog even wil herhalen wat JanDM reeds zei, namelijk:
PASSWORD() should be used only to manage passwords for MySQL accounts.
Gewoon MD5() gebruiken dus.

  • Icey
  • Registratie: November 2001
  • Laatst online: 22:59
Wellicht gebruikt PHP of MySQL iets van een salt, wellicht is daardoor de uitkomst anders. Opzich maakt dat niet zoveel uit, je kan prima verder door alleen gebruik te maken van de MD5 van MySQL of alleen die van PHP.

  • ibmos2warp
  • Registratie: Januari 2007
  • Laatst online: 20-11-2023

ibmos2warp

Eval is Evil

PainkillA schreef op dinsdag 22 mei 2007 @ 20:04:
de MD5 functie bij SQL INSERT gaf
21232f297a57a5a743894a0e4a801fc3
Dit is naar mijn mening goed, want dit is admin
Het php script gaf met de md5 via echo de volgende hash af van het converteren van invoer naar md5:
b148e7f41fdc3be4b14e8d17e068bbad
Hier zit je fout, want dit is $pass, je doet dus iets niet goed in je script ;)

Check het hier maar eens :)

Ik weet alles van niks
Vind Excel ongelovelijk irritant.


  • PainkillA
  • Registratie: Augustus 2004
  • Laatst online: 28-11 11:17
Ok ik heb nu de user verwijderd en opnieuw geinsert met MD5 en de php script aangepast zodat hij MD5('$pass') gebruikt. Ook dit werkt niet. Dit omdat de MD5 hash die php aanmaakt voor het wachtwoord "admin" anders is dan de hash die ik krijg in phpmyadmin voor het wachtwoord "admin".

  • PainkillA
  • Registratie: Augustus 2004
  • Laatst online: 28-11 11:17
k thx heb gewoon te veel lopen switchen en aanpassen met md5 en password en echo's dat ik helemaal de weg kwijt was maar werkt nu goed.

  • analog_
  • Registratie: Januari 2004
  • Niet online
je moet eens juist escapen ;)
PHP:
1
mysql_query("insert into traloe values ('','jan','".$pass."');")

owja : een godgeschenk : var_dump();

[ Voor 15% gewijzigd door analog_ op 22-05-2007 20:55 ]


  • ibmos2warp
  • Registratie: Januari 2007
  • Laatst online: 20-11-2023

ibmos2warp

Eval is Evil

PainkillA schreef op dinsdag 22 mei 2007 @ 20:45:
Ok ik heb nu de user verwijderd en opnieuw geinsert met MD5 en de php script aangepast zodat hij MD5('$pass') gebruikt. Ook dit werkt niet. Dit omdat de MD5 hash die php aanmaakt voor het wachtwoord "admin" anders is dan de hash die ik krijg in phpmyadmin voor het wachtwoord "admin".
Het is je nu dus wel gelukt, maar kijk, als je niet meer precies weet hoe iets zit kan je altijd effe op php.net kijken naar hoe het moet. In dit geval dus md5. En daar zie je dat je om de string geen quotes moet zetten.

Ik weet alles van niks
Vind Excel ongelovelijk irritant.

Pagina: 1