Hallo allemaal,
Introductie
Ik ga jullie uitleggen hoe je MD5-wachtwoorden kunt omzetten in een betere encryptie.
Het principe
Het werkt zo: wanneer iemand inlogt, weet je de gebruikersnaam/email en het wachtwoord die ingevoerd zijn.
Je haalt uit de database dan de wachtwoord-hash op van de gebruiker met die naam/email.
Vervolgens kijk je of die hash nog met de oude hashfunctie is, bijvoorbeeld MD5. Dat kun je doen met md5($_POST['password']) === $row['password']
, of iets dergelijks.
Als dat het geval is, kun je vervolgens een nieuwe hash genereren met een sterkere functie, bijvoorbeeld password_hash($_POST['password'], PASSWORD_BCRYPT)
, en die weer terug stoppen in de database.
Als het wachtwoord niet met de oude hash klopt, controleer je het vervolgens met de nieuwe hash, en als het dan niet klopt, is het wachtwoord fout.
Voorbeeld
(pseudocode)
input_username = request.postfield('username')
input_password = request.postfield('password')
logged_in = false
row = db.query('SELECT password FROM user WHERE username = ?', input_username).first()
if (row.password == md5(input_password)) {
new_password_hash = bcrypt.hash(input_password)
db.query('UPDATE user SET password = ? WHERE username = ?', new_password_hash, input_username)
logged_in = true
} else if (bcrypt.verify(input_password, row.password)) {
logged_in = true
}
if (logged_in == false) {
// laat foutmelding zien
} else {
// inloggen geslaagd
}
VERGEET NIET om ook in je registratiescript de nieuwe hashfunctie te geruiken.
Ik hoop dat jullie hier wat van hebben geleerd.
~ @Xesau