Wachtwoord MD5

Status
Niet open voor verdere reacties.

xaltar

Gebruiker
Lid geworden
22 mrt 2010
Berichten
26
Dag allemaal

Ik heb net een scriptje gemaakt om een willekeurige wachtwoord aan te maken en dit in MD5 te posten in mijn databank. Maar met het aangemaakte wachtwoord kan ik niet aanmelden. (ik stuur het wachtwoord via mail naar de gebruikers)
Iemand een idee wat er fout loopt?

PHP:
//Initialize a random desired length
    $random_password = rand(8, 12);

    for($length = 0; $length < $random_password; $length++) {
    //Append a random ASCII character (including symbols)
    $emailpassword1 .= chr(rand(32, 126)); }
	
	//Encrypt $emailpassword1 in MD5 format for the database
	$emailpassword = md5($emailpassword1);
	
        // Make a safe query
       	$query = sprintf("UPDATE `info` SET `Wachtwoord` = '$emailpassword' 
						  WHERE `Mail` = '$forgotpassword'",
                    mysql_real_escape_string($emailpassword));
					
					mysql_query($query)or die('Could not update gebruiker: ' . mysql_error());
 
md5 hash naar de gebruiker gestuurd?
probeer in te loggen met $emailpassword1

Meestal worden wachtwoorden voor het inloggen als md5 gecheckt, wss wordt er bij jou dus md5(md5(wachtwoord)) in het database gecheckt.
 
Dat gaat hem ook niet worden aangezien daar de hash in zit :)

Verder werkt sprintf niet op de manier waarop jij hem gebruikt, en een "safe query" is het niet helemaal. Daarvoor zul je prepared statements op zijn minst moeten gebruiken ;)

Probeer dit eens:
PHP:
<?php
//Initialize a random desired length
$random_password = rand(8, 12);

$emailpassword = '';
for($length = 0; $length < $random_password; $length++) {
    //Append a random ASCII character (including symbols)
    $emailpassword .= chr(rand(32, 126));
}

// Make a safe query
$query = sprintf(
    "UPDATE `info` SET
        `Wachtwoord` = MD5(%1$s)
    WHERE `Mail` = '%$2s'",
    mysql_real_escape_string($emailpassword),
    $forgotpassword
);

mysql_query($query) or die('Could not update gebruiker: ' . mysql_error());

MySQL heeft zelf ook een MD5-functie, dus kun je die net zo goed gebruiken :)
Overigens verdient SHA1 of hoger de voorkeur qua beveiliging.

Aan het eind van dit script zou je de mail-functie kunnen aanroepen, het wachtwoord zit in de variabele $emailpassword.
 
Laatst bewerkt:
Ongelooflijk bedankt! Hier ben ik wat mee :)

Ik probeer zo'n prepared statement te begrijpen: (%1$s) verwijst dan naar de eerste waarde in mijn mysql_real_escape?

PS: Kloppen de haakjes in deze regel wel?
PHP:
 mysql_real_escape_string($emailpassword), $forgotpassword


Ik had al over SHA1 gelezen. Hoe gaat dit dan in z'n werk?

Thnx a lot!
 
Laatst bewerkt door een moderator:
Ik probeer zo'n prepared statement te begrijpen: (%1$s) verwijst dan naar de eerste waarde in mijn mysql_real_escape?
sprintf() gebruiken voor je query opbouw is wel een nette manier maar is geen prepared statement.

Daarvoor moet je gebruik maken van PDO of MySQLi

"%1$s" geeft aan dat op die plek een string komt welke als eerste in de tweede parameter van sprintf vermeld staat.
In dit geval dus mysql_real_escape_string($emailpassword).

PS: Kloppen de haakjes in deze regel wel?
PHP:
 mysql_real_escape_string($emailpassword), $forgotpassword
Ik heb geen idee waar $forgotpassword vandaan komt aangezien het niet in het gegeven script naar boven komt.
Als het een variabele is die door middel van een $_POST- of $_GET-variabele wordt ingesteld dan zou deze ook geescaped moeten worden.
Zo dus:
PHP:
$query = sprintf(
    "UPDATE `info` SET
        `Wachtwoord` = MD5(%1$s)
    WHERE `Mail` = '%$2s'",
    mysql_real_escape_string($emailpassword),
    mysql_real_escape_string($forgotpassword)
);

Ik had al over SHA1 gelezen. Hoe gaat dit dan in z'n werk?
Het is niets anders dan een andere soort encodering. Verschilt dus weinig met MD5, in die zin dat SHA1 moeilijker te kraken is dan MD5.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan