Kezdőoldal » Számítástechnika » Weblapkészítés » Hogyan ellenőrizzem azt, hogy...

Hogyan ellenőrizzem azt, hogy a régi jelszó megfelel-e az adatbázisban lévővel, sha512-vel?

Figyelt kérdés

Hali, nem nagyon tudom, hogy mi a gond, hiába próbálkozom, nem tudok rájönni.

a db_password az megfelelő, kiírja, azonban azt szeretném, hogyha a regisztrációnál használt jelszót írom be, akkor a db_password egyenlő legyen az oldpw-vel. Teszteltem, hogy kiírom echoval a kapott dolgokat, és akkor arra jöttem rá, hogy a db_password az megfelel, azonban az oldpw nem azt írja, amit szeretnék.

Kód:

if($_POST['editbutton']) {

$oldpw = stripslashes($mysqli->real_escape_string($_POST['oldpw']));

$newpw = stripslashes($mysqli->real_escape_string($_POST['newpw']));

$newpw = hash('sha512', $password);

$newpwconfirm = stripslashes($mysqli->real_escape_string($_POST['newpwconfirm']));

if ($stmt = $mysqli->prepare("SELECT password, salt FROM members WHERE email = ? LIMIT 1")) {

$stmt->bind_param('s', $email); // Bind "$email" to parameter.

$stmt->execute(); // Execute the prepared query.

$stmt->store_result();


// get variables from result.

$stmt->bind_result($db_password, $salt);

$stmt->fetch();


$oldpw_check = hash('sha512', $oldpw . $salt);

echo "$oldpw_check <br /> <br /> $db_password";

if ($db_password == $oldpw_check) {

$mysqli->query("UPDATE $table SET password = '$newpw' WHERE username = '$username]'");

echo 'Sikeres';

}

else {

echo 'Sikertelen';

}



}

}


echo " <h1>Szerkesztés</h1>";


echo '

<dl>

<form method="post" name="edit_form" id="third">

<label for="email"><strong><span class="blue">*</span>Régi jelszó:</strong></label>

<input name="oldpw" id="oldpw" type="password" size="20" />


<label for="subject"><strong><span class="blue">*</span>Új Jelszó:</strong></label>

<input type="password" name="newpw" id="password" size="20" />


<label for="subject"><strong><span class="blue">*</span>Új Jelszó ismétlése:</strong></label>

<input type="password" name="newpwconfirm" id="password" size="20" />


<br /><br />

<input type="submit" class="buttonSubmit" value="Ment" name="editbutton" onclick="editformhash(this.form, this.form.epw);" /><br />

</form>


</dl>';



#MySQLi #reset password #changepassword
2014. máj. 1. 12:34
 1/9 anonim ***** válasza:

$newpw = hash('sha512', $password);

$oldpw_check = hash('sha512', $oldpw . $salt);


szerintem regeléskor nem sóztad be (meg itt sem, jelszóváltáskor), viszont ellenőrzéskor sózottan hasonlítod össze.

2014. máj. 1. 16:41
Hasznos számodra ez a válasz?
 2/9 anonim ***** válasza:
érthetőbben: $db_password sótlan, $old_pw pedig sós
2014. máj. 1. 16:44
Hasznos számodra ez a válasz?
 3/9 A kérdező kommentje:

Regisztráció kódja itt van, és van benne salt, amikor is betölti az adatbázisba, tehát ezért nem nagyon értem:


// Create a random salt

$random_salt = hash('sha512', uniqid(openssl_random_pseudo_bytes(16), TRUE));


// Create salted password

$password = hash('sha512', $password . $random_salt);

$IP = $_SERVER['REMOTE_ADDR'];

// Insert the new user into the database

if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password, salt, REGDATE, BANNED, PERM, Tarsitas, Acode, IP, Activated) VALUES (?, ?, ?, ?, '$time',0,0,0,0,'$IP',0)")) {

$insert_stmt->bind_param('ssss', $username, $email, $password, $random_salt);

2014. máj. 1. 18:30
 4/9 anonim ***** válasza:

új regisztrációval próbálkozol? ha nem, és a régivel próbálod, akkor elsőre ugye lefut a jelszóváltás, mert a $db_pass egyezik az $olpw_check-el, viszont salt nélküli kerül be db-be, ezek után már sosem fog egyezni.

ha mégsem ez a gond, akkor egyelőre nincs ötletem.

2014. máj. 1. 19:59
Hasznos számodra ez a válasz?
 5/9 A kérdező kommentje:
Az előző kódot a sima regisztrációból másoltam be, ezt afféle jelszó változtatásnak szeretném, csak sajnos nem fog lefutni a newpw, ha az oldpw és a db_password nem azonos, pedig az első regisztrációnál random_salttal beadja a táblába, loginnál kiveszi salttal és most itt is szeretném salttal kivenni, csak nem sikerül
2014. máj. 1. 23:16
 6/9 anonim ***** válasza:

igen, tudom mi lenne ez, de azt mondom, hogy elsőre pedig lefut, és onnantól kezdve soha nem lesz jó.


Gondold végig:


Regisztrál, adatbázisba került a saltot használó jelszó, és a salt.

Meg akarja változtatni, az adatbázisból kiolvassa a (saltos) jelszót, és a saltot.

A megadott régi jelszót salttal együtt elkódolja

$oldpw_check = hash('sha512', $oldpw . $salt);

és ezt ellenőrzi az adatbázisban lévővel. if ($db_password == $oldpw_check)

Egyezik.

Elmenti az új jelszót, aminél nem sózod be -> $newpw = hash('sha512', $password);

Innentől kezdve az adatbázisban a salt nélküli van eltárolva.

Megint megváltoztatnád a jelszót: a db-ben levő (már) salt nélkülit az $oldpw_check-el, ami pedig használja a saltot. Soha többé nem fog egyezni.


Hogyan javíthatod ki?

Ha még nem tetted, akkor az új pw-hez is használd a saltot:

$newpw = hash('sha512', $password . $salt);

De így még adatbázisban a korrupt jelszavak vannak. Ezeket mondjuk kitörlöd, és csak új regisztrációkkal foglalkozol.

2014. máj. 2. 13:08
Hasznos számodra ez a válasz?
 7/9 A kérdező kommentje:
Igen, most már mindenhol ott a salt, azonban még most sem egyezik a db password az oldpwvel, és új regisztrációkkal próbáltam, tehát töröltem az előzőeket. Illetve a salt nélküli jelszó sem kerül be az adatbázisba, mivel nem fut le, ha a db password és az oldpw nem egyezik. és nem egyezik, aminek okát még nem tudom..
2014. máj. 2. 13:38
 8/9 anonim ***** válasza:

nézd meg, hogy a regnél generált random salt egyezik-e azzal ami bekerült adatbázisba (nem-e vágja le)



(stripslashes($mysqli->real_escape_string(..))

szerintem ez így semmit nem csinál, escapeli a spec karaktereket, majd kiszedi az escapet.)

2014. máj. 2. 14:27
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:

Leváltottam most a sha512t sha1-re, és átírtam a random saltot, de ez sem egyezik, és ez jóval kisebb, tehát kifér: Reginél és jelszóváltásnál is ugyanazt a random saltot írtam most be.



$random_salt = uniqid(mt_rand(), true);


$newpw = sha1($random_salt.$password);

$newpwconfrim = sha1($random_salt.$newpwconfirm);

// hash the password with the unique salt.

$password = sha1($salt.$password);

2014. máj. 2. 17:02

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!