Bonjour. visiteurs jour : 10
Au président
Beauté santé
Infos loisirs
Ensemble
Jean
Informatique
Relativité
Relativity
Les joies de l'informatique et de l'internet !
Accueil - Disques - Excel - Informatique - Infos - Internet - Javascript - logiciels - Programation - Sites RJ - Vidéo - Plan du site -
Le hashage ne fait que protéger les mots de passe dans la base, pas leur éventuelle interception alors qu'ils sont envoyés à l'application par l'utilisateur. Les algorithmes de hashage comme MD5, SHA1 et SHA256 sont rapides mais faibles. Avec la force brute des nouveaux ordinateurs il est possible d'explorer toutes les combinaisons dans un temps de traitement raisonnable.
?
Lorsqu'on hashe des mots de passe, les deux considérations les plus importantes sont le temps de traitement, et le grain de sel. Plus la puissance de traitement requise est élevée, plus il faudra du temps pour casser le mot de passe en analysant sa sortie
PHP 5.5 fournit une API native de hashage de mot de passe qui gère à la fois le hashage et la vérification de mots de passe de manière sécurisée. Il existe aussi une » bibliothèque pure PHP de compatibilité pour PHP 5.3.7 et suivants.
Une autre option est la fonction crypt(), qui supporte différents algorithmes de hashage en PHP 5.3 et suivants. Un grain de sel, ou "salt", en cryptographie, est appliqué durant le processus de hashage pour éliminer la possibilité d'attaques par dictionnaires (hashages enregistrés dans une grande liste et comparés). password_hash() crée un salt aléatoire si vous n'en fournissez pas, et c'est généralement la façon la plus sécurisé et la plus simple. Avec les fonctions password_hash() ou crypt(), la valeur retournée inclue le salt et doit être stockée telle quelle dans votre base de données. Elle est à fournir directement à la fonction password_verify() ou la fonction crypt() lors de la vérification des mots de passe. source Manuel PHP FAQ
$pass = 'Mot de passe' ;
$hash = password_hash($pass,PASSWORD_BCRYPT,['cost' => 9]) ;
On augmente le coût de l'algorithme le rendant par la même occasion plus lent et donc plus dur à « brute-forcer ».
Déterminer le coût idéal
function getOptimalCost($timeTarget)
{
$cost = 9;
do {
$cost++;
$start = microtime(true);
password_hash("test", PASSWORD_BCRYPT, ["cost" => $cost]);
$end = microtime(true);
} while (($end - $start) < $timeTarget);
return $cost;
}
echo getOptimalCost(0.3);
On choisira en général un temps d'exécution entre 0,1 s et 0,5 s ; c'est le bon compromis entre sécurité et attente de l'utilisateur.
Pour un ordi de bureau moyen nous avons troiuve pour 0,1 cost=11 pour 0,2 cost=12 pour 0,3 cost=13 et pour 0.4 cost=13 Le hash d'une même chaîne ne donne jamais le même résultat, dans ce cas comment le comparer ?
PHP met à disposition la fonction password_verify(), pour cela :
Comparer hash et mot de passe
Sélectionnez
$pass_base='$2a$10$GlvaE1qXuYE6O/ICVtPTeOf3QwE6QNB2quHgqpbK2JKzDYCNnyAL6' if(password_verify($pass, $pass_base)) {
echo 'OK';
} else {
echo 'ERREUR';
}
print_r(password_get_info($hash));
Cela affichera
Array
(
[algo] => 1
[algoName] => bcrypt
[options] => Array
(
[cost] => 12
)
)
On peut utiliser directement la fonction password_needs_rehash() qui va vérifier la validité d'un hash avec les options fournies : if (password_verify($pass, $hash)) {
if (password_needs_rehash($hash, $algorithm, $options)) {
$hash = password_hash($pass, $algorithm, $options);
}
} if(password_verify($pw, $enr['pw_h'])) $pass1=1; else $pass1=0;
On peut utiliser ce test après avoir changé le coût de l'algorithme pour permettre aux utilisateurs de réinitialiser leur mot de passe de manière progressive, au fur et à mesure qu'ils accèdent au site.
Source Developpez.com
PHP hashage ou hachage du mots de passe
Comment hasher les mots de passe
PHP by example en utilisant l'algorithme PASSWORD_BCRYPT et un côut de 9 pour le choix du grain de sel
Pour déterminer le coût idéal en fonction du matériel disponible, on peut utiliser ce code :
Il est possible d'avoir les informations sur un hash via la fonction password_get_info().