hash512 validatie werkt niet
Ik ben redelijk nieuw met PHP. Ik weet wel ongeveer de standaard dingen en heb veel geleerd uit andere PHP gemaakte scripts die hier op deze site geplaatst zijn.
Echter kamp ik nu met een probleem. Als iemand zich registreert, word er via deze code een hash gemaakt:
Quote:
$password = $data['pwd'];
for ($i = 0, $salt = ""; $i < 64; $i++) $salt .= chr(mt_rand(0, 255));
$hash = hash("sha512", $salt . $password, true);
for ($i = 0, $salt = ""; $i < 64; $i++) $salt .= chr(mt_rand(0, 255));
$hash = hash("sha512", $salt . $password, true);
Dit gaat tot zover goed, neem ik aan.
Er word namelijk zoiets aangemaakt in de MySQL database:
Quote:
hash (binary(220))
d285adb401dd015becc6679d37826a5d4f030b779aae2d668a99632689ce80d8f8caa8bc32dc7589e3833543402e46a1e286aaebfc765d38ea5a3cb51929475300002e2e2e
d285adb401dd015becc6679d37826a5d4f030b779aae2d668a99632689ce80d8f8caa8bc32dc7589e3833543402e46a1e286aaebfc765d38ea5a3cb51929475300002e2e2e
Quote:
salt (binary(220))
d2c976b9e706b1e01c12c042e9cc98d2f1149c3e3347f9068b683b8153ed9fd5bca836a569c89ce310198b04050faea26e799ac1dd2fa7b31ce2729861a44119000000000000002e2e2e
d2c976b9e706b1e01c12c042e9cc98d2f1149c3e3347f9068b683b8153ed9fd5bca836a569c89ce310198b04050faea26e799ac1dd2fa7b31ce2729861a44119000000000000002e2e2e
Ik vermoed dat dit tot zover klopt, echter weer ik niet wat de size moest zijn van de binary dus heb ik het 220 gemaakt.
Nu probeer ik in te loggen met de volgende code:
Quote:
$password = $data['pwd'];
$result = mysql_query("SELECT `hash`,`salt` FROM users WHERE
$user_act") or die (mysql_error());
$num = mysql_num_rows($result);
if ( $num > 0 ) {
list($hash,$salt) = mysql_fetch_row($result);
if ($hash == hash("sha512", $salt . $password, true))
$result = mysql_query("SELECT `hash`,`salt` FROM users WHERE
$user_act") or die (mysql_error());
$num = mysql_num_rows($result);
if ( $num > 0 ) {
list($hash,$salt) = mysql_fetch_row($result);
if ($hash == hash("sha512", $salt . $password, true))
Maar hier gaat het fout. Als ik hier probeer in te loggen geeft die de error. (Invailed username/password).
Ik hoop dat iemand mij kan helpen hierbij, ik heb al veel dingen geprobeerd maar niks hielp..
Hartelijk bedankt!
Reno
Reno L op 10/03/2011 16:36:57:
... echter weer ik niet wat de size moest zijn van de binary dus heb ik het 220 ...
Sha512. Waar staat de 512 voor?
- Gebruik geen backticks in je query (onnodig).
@arjan onnodig ? gewoon fout
Het geeft voornamelijk verwarring. Maar het is niet fout, want als je het goed gebruikt werkt het ook gewoon. Het is daarom onnodig en verwarrend.
Bedankt voor jullie snelle reacties!
De sha512 is de waarde waarin het ingevoerde passwoord gecodeert moet worden. Er bestaan meerdere varianten van de sha.
De user_act staat voor de ingevoerde username. Dus als er bij Reno ingevoert word, kijkt ie de database na voor de username Reno.
Wat bedoelt u met backticks?
Hartelijk bedankt voor jullie antwoord
Toevoeging op 10/03/2011 18:08:14:
Ps. Ik had eerst precies dezelfde code, maar dan in md5 variant. Aangezien die onveilig is ben ik nu bezig om sha512 te gebruiken.
De md5 code werkte wel gewoon zonder errors.
De fout zit denk ik in de size van de binary (als dat mogelijk is) of in het inloggen.
Overigens een kanttekening: is het wel nodig zo'n lange hash te hebben? Als je met alle andere veiligheidslekken rekening houdt, lijkt mij dat een lange hash overbodig is. Ik persoonlijk zou kiezen voor sha1. (40 tekens)