Volgens aardig wat website is de beste manier om wachtwoorden te beveiligen de 'crypt($wachtwoord)' methode. Deze encryptie schijnt veel sterker te zijn dan de hash beveiligingen (md5, sha1). Echter lukt het mij niet om de encrypted versie te controleren met de ingevulde waarde (in een login-scherm) aangezien de encryptie van laatstgenoemde steeds veranderd (logisch). Hoe kan je dit het beste toepassen?
Oftewel:
<?php
$password = $_POST['password'];
$db_pass; // Een uit de database gehaald encrypted wachtwoord (bijv. $1$tkiflmLd$N8px9zX4XL8mIkkcMlGss0);
if($password == $db_pass){
//login
}
?>
Haal nooit het wachtwoord uit de database, nergens voor nodig. Welke manier je ook gebruikt, je wilt het wachtwoord niet kunnen decrypten. Als je een wachtwoord wilt controleren gooi je er dezelfde encryptie/hashing overheen en de uitkomst daarvan vergelijk je met de waarde in je database. Zijn de waardes gelijk, dan klopt het en kan je de gebruiker inloggen.
Na het lezen van crypt in de php manual blijkt dat inderdaad wel iets anders te werken dan ik zou verwachten. Volgens de manual kan je op de volgende manier het password controleren:
<?php
if (crypt($user_input, $hashed_password) == $hashed_password) {
echo "Password verified!";
}
?>
Waarbij $hashed_password dus de eerder aangemaakt hash is.

$db_hash = $query['pass_hash']; // het wachtwoord uit je db
$pass_hash = crypt($_POST['wachtwoord']);

if($db_hash == $pass_hash)


Een klein stukje voorbeeld code al zou ik zelf ook gebruik maken van in ieder geval een salt.
Het liefst zou ik voor bcrypt gaan.
Ik heb het opgelost met de bcrypt class. Werkt nu super!

Bedankt voor de altijd snelle reacties!

Groeten,
Verstandige keuze ;)
Dat bcrypt beter is komt niet zozeer door het hash algoritme, maar door de manier waarop ze het gebruiken. Zowel salting als het automatisch vertragen van brute force aanvallen is een sterk punt van deze functie.

Reageren