8768 sujets
Développement web côté serveur, CMS
Hello Tintin !
C'est une question qui mérite vraiment d'être posée. J'imagine que le terme "meilleur" désigne ici "sécurisé". Dans ce cas, oublie les algorithmes MD5 et SHA-1 qui étaient beaucoup utilisés mais qui sont devenus obsolètes (SHA-1 y'a pas si longtemps que ça au passage).
Il existe une nouvelle famille d'algorithmes appelée SHA-2 pour succéder à SHA-1, qui contient notamment SHA-256 que tu peux utiliser sans problème. Dans tous les langages tu devraient trouver des librairies qui te permettent de hasher tes mots de passe avec cet algorithme, si c'est pas déjà supporté nativement comme en PHP.
En espérant avoir répondu à ta question.
C'est une question qui mérite vraiment d'être posée. J'imagine que le terme "meilleur" désigne ici "sécurisé". Dans ce cas, oublie les algorithmes MD5 et SHA-1 qui étaient beaucoup utilisés mais qui sont devenus obsolètes (SHA-1 y'a pas si longtemps que ça au passage).
Il existe une nouvelle famille d'algorithmes appelée SHA-2 pour succéder à SHA-1, qui contient notamment SHA-256 que tu peux utiliser sans problème. Dans tous les langages tu devraient trouver des librairies qui te permettent de hasher tes mots de passe avec cet algorithme, si c'est pas déjà supporté nativement comme en PHP.
En espérant avoir répondu à ta question.
Ouai ouai... quand même on peut faire des chose en combinant les méthodes soit disant obsolètes.
Par exemple dans une classe d'utilitaires, j'utilise une fonction de ce genre pour hasher mes mots de passe.
Là, franchement, celui qui arrivera à déchiffrer ça, je lui paye un Orangina
Modifié par lionel_css3 (08 Aug 2018 - 10:58)
Par exemple dans une classe d'utilitaires, j'utilise une fonction de ce genre pour hasher mes mots de passe.
Là, franchement, celui qui arrivera à déchiffrer ça, je lui paye un Orangina
public static function hashPassword($p) {
define("SALT", "<b}DKJ{]1QIcgsl<-Ksp#ybnaP!{M@jlncCVntjhyEaN*WjhdfJXZ");
return sha1(SALT . md5($p . SALT) . sha1(SALT));
}
Modifié par lionel_css3 (08 Aug 2018 - 10:58)
@lionel
C'est une très mauvaise pratique, il faut en général éviter la bouillie de hash sans être un spécialiste en cryptographie:
1) Cela peut éventuellement affaiblir au final le hash en augmentant les collisions.
2) Si l'attaquant a accès à ta db il y a de fortes chances qu'il accède à ton code source aussi.
3) La sécurité de ton ton code est en fait à peu près celle de l'algorithme le plus fort (sha1)
4) Un sel statique ne protège pas ceux qui partagent un même mot de passe (ou une collision) et est à éviter
Certes sha1 est «cassé» mais pour le faire il faut une certaine puissance de calcul que seuls quelques puissances peuvent déployer, pour le moment.
Voici un code simplissime qui utilise BCRYPT et un sel aléatoire, et qui est des millions de fois plus sécure (alors pourquoi s'en priver?):
Et pour décoder:
http://php.net/manual/fr/function.password-hash.php
http://php.net/manual/fr/function.password-verify.php
C'est une très mauvaise pratique, il faut en général éviter la bouillie de hash sans être un spécialiste en cryptographie:
1) Cela peut éventuellement affaiblir au final le hash en augmentant les collisions.
2) Si l'attaquant a accès à ta db il y a de fortes chances qu'il accède à ton code source aussi.
3) La sécurité de ton ton code est en fait à peu près celle de l'algorithme le plus fort (sha1)
4) Un sel statique ne protège pas ceux qui partagent un même mot de passe (ou une collision) et est à éviter
Certes sha1 est «cassé» mais pour le faire il faut une certaine puissance de calcul que seuls quelques puissances peuvent déployer, pour le moment.
Voici un code simplissime qui utilise BCRYPT et un sel aléatoire, et qui est des millions de fois plus sécure (alors pourquoi s'en priver?):
$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
// donne $2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
Et pour décoder:
if (password_verify('rasmuslerdorf', $hash)) {
echo 'Le mot de passe est valide !';
} else {
echo 'Le mot de passe est invalide.';
}
http://php.net/manual/fr/function.password-hash.php
http://php.net/manual/fr/function.password-verify.php