manganMedlem sedan feb. 2003216 inlägg Hej!
Sitter och pillar med ett litet problem som jag inte blir klok på och nu behöver jag ha hjälp!
Jag har användare i en databas vars lösenord är krypterade med md5() i PHP. Nu håller jag på med att slumpa fram temporära lösen till dom användare som glömmer sina. Att slumpa fram nya lösen går ju fint enligt följande
for($i=0;$i<8;$i++)
$newpassword .= chr(rand(33, 126));
Detta ger lösen med 8 tecken och funkar fint. Nu börjar dock problemen....
Jag uppdaterar lösen på användaren i databasen
$db = new db; // objekt som tar hand om databasen
$db->dbConnect(); // kopplar upp mot databasen
$password = md5($newpassword);
if($db->dbQuery("UPDATE databas.users
SET password = '$password'
WHERE email = '$email'")){
// allt gick bra
}
och allt är frid och fröjd tills jag försöker logga in då jag inte kommer in. Om jag nu genererar ett nytt lösen så kommer jag oftast in med det men inte alltid. Är det så att md5() inte "gillar" vissa tecken? Har läst om md5() i PHP-manualen men inte hittat något som antyder detta.
Någon som har en ide om var det går fel?
PeddaMedlem sedan juni 20006 032 inlägg Vet inte vad problemet är med din kod, men denna kod har jag använt mig av för att slumpa fram lösenord.
Har aldrig haft problem med att logga in med det.
Testa och se om det funkar bättre.
// slumpa fram ett nytt lösenord
$length=8;
while($i<$length) {
$a=mt_rand(1,3);
if($a==1) {
$a=mt_rand(48,57);
$a=chr($a);
}
if($a==2) {
$a=mt_rand(65,90);
$a=chr($a);
}
if($a==3) {
$a=mt_rand(97,122);
$a=chr($a);
}
$ord .=$a;
$i++;
}
manganMedlem sedan feb. 2003216 inlägg Hmmm, ser att du använder färre olika tecken än vad jag gör i dina password. Finns det någon "standard" för vilka tecken som brukar vara med?
MatteMedlem sedan aug. 20002 975 inlägg En vanlig orsak till att man får problem med md5-lösenord är att man inte reserverat tillräckligt med utrymme för md5-hashen.
Det behövs plats för 32 tecken.
manganMedlem sedan feb. 2003216 inlägg Matte: antar att du menar i min databas? jodå, där finns det plats och inloggningen funkar ju så det kan itne vara fel på det
manganMedlem sedan feb. 2003216 inlägg Ok, då funkar det!
Verkar onekligen som om man inte kunde välja vilka tecken som helst vilket jag förstår nu. Vissa av de tecken jag slumpade fram har ju betydelse i strängar och kan säkert ha påverkat vad som blev resultatet av md5(), tex. kan jag tänka mig att kombon \n kan ha pajjat en del mm.
Har använt en lite modifierad variant på ditt förslag Pedda och det verkar funka klockrent.