Magazine High tech

Encrypter un mot de passe avec salage en PHP

Publié le 08 juin 2012 par Menerve
Voici une technique pour encrypter un mot de passe qui fait intervenir une variable: le sel (salt).
L'exemple ci-dessous fonctionne en langage PHP et est inspiré de la fonction d'OsCommerce.
Attention, le cryptage est à sens unique et il n'est pas possible de retrouver un mot de passe perdu!
La facon de vérifier le mot de passe est d'extraire le salt du mot de passe crypté, de réencrypter le mot de passe puis comparer les deux.
Ici, le salt est générée avec un nombre aléatoire et hashé. L'avantage est donc que deux mots de passe identiques auront un résultat crypté différent.
Aussi, on utilisera la fonction de hashage SHA1, qui retourne un nombre hexadécimal d'une taille de 40 caractères. On préfèrera le SHA1 au MD5 qui est un peu trop utilisé.
Voici le code PHP: une fonction d'encryptage, encrypt_password() et une fonction de comparaison du mot de passe, match_password()
<?php
function encrypt_password($plain) {
	$password = rand(10, 9999999999);
	$salt = substr(sha1($password), 0, 2);
	$password = sha1($salt . $plain) . $salt;
	return $password;
}

function match_password($password, $plain) {
	$salt = substr($password, strlen($password)-2, strlen($password));
	return $password == sha1($salt . $plain) . $salt;
}

echo 'Password encrypted: '.encrypt_password('motdepasse');
echo '<BR />Password match?';
var_dump(match_password('8570faf6d4c0ea6310751ad34c59339ab582d5b73f', 'motdepasse'));
?>
PHP

Retour à La Une de Logo Paperblog

A propos de l’auteur


Menerve 243 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog

Magazine