Mot de passe crypter
Résolu/Fermé
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
-
6 juil. 2014 à 01:38
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 - 27 juil. 2014 à 08:53
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 - 27 juil. 2014 à 08:53
A voir également:
- Mot de passe crypter
- Voir mot de passe wifi android - Guide
- Mot de passe administrateur - Guide
- Identifiant et mot de passe - Guide
- Trousseau mot de passe iphone - Guide
- Réinitialiser pc sans mot de passe - Guide
10 réponses
JooS
Messages postés
2468
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 7/07/2014 à 01:42
Modifié par JooS le 7/07/2014 à 01:42
Toute les fonctions de hachages déclenchent des collisions pour la simple raison que la taille du hach généré est limité, tant-dis que le message en entré non, donc l'ensemble d'entré est beaucoup plus vaste que celui de sortie, d'ou la surjection, et c'est la qu'intervient le système de gestion des collisions.
A ma connaissance, l'injection n'a jamais pu être implémenté, informatiquement parlé.
PS : Tout algorithme est jugé bon, jusqu'au jour ou il est cassé.
A ma connaissance, l'injection n'a jamais pu être implémenté, informatiquement parlé.
PS : Tout algorithme est jugé bon, jusqu'au jour ou il est cassé.
JooS
Messages postés
2468
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
6 juil. 2014 à 06:09
6 juil. 2014 à 06:09
Salut,
Biensure que ça ne peut pas fonctionner, crypter(ici on dis hacher) la chaîne "ABC" et "ABC" concaténé avec "GRAIN" ne donnent forcement pas le même résultat.
Donc la méthode de cryptage au niveau SQL doit être la même qu'au niveau PHP.
Alors soit vous utilisez le même grain de sable et la même récursion (au niveau SQL) que dans la page de vérification.
Soit, avant l'insertion, vous cryptez le mot de passe (PHP) avant de lier la variable (bindParam).
La deuxième méthode est plus approprié, car le grain de sable ainsi que la méthode de hachage ne se trouveront qu'a un seul endroit.
Exemple (Security.class.php) :
Inscription (inclure le fichier Security.class.php) :
Authentification (inclure le fichier Security.class.php) :
Biensure que ça ne peut pas fonctionner, crypter(ici on dis hacher) la chaîne "ABC" et "ABC" concaténé avec "GRAIN" ne donnent forcement pas le même résultat.
Donc la méthode de cryptage au niveau SQL doit être la même qu'au niveau PHP.
Alors soit vous utilisez le même grain de sable et la même récursion (au niveau SQL) que dans la page de vérification.
Soit, avant l'insertion, vous cryptez le mot de passe (PHP) avant de lier la variable (bindParam).
La deuxième méthode est plus approprié, car le grain de sable ainsi que la méthode de hachage ne se trouveront qu'a un seul endroit.
Exemple (Security.class.php) :
class Security { const GRAIN = 'f?,j89-k0.;-!?lqjçs_di3%5a6_4jhfgh'; public static function hash($str) { return sha1(md5($str) . self::GRAIN . sha1($str . self::GRAIN) . $str); } }
Inscription (inclure le fichier Security.class.php) :
$requete->bindParam(':pass', Security::hash($PARAM['PASS']));
Authentification (inclure le fichier Security.class.php) :
if(Security::hash($_POST['pass']) == $data['pass']) { // Mot de passe correct }
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
6
6 juil. 2014 à 19:39
6 juil. 2014 à 19:39
Bonjour
Merci pour votre retour.
Je vais essayer de mettre en place votre méthode très bien détaillée et compréhensible.
Merci
Merci pour votre retour.
Je vais essayer de mettre en place votre méthode très bien détaillée et compréhensible.
Merci
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
6 juil. 2014 à 21:37
6 juil. 2014 à 21:37
" "ABC" et "ABC" concaténé avec "GRAIN" ne donnent forcement pas le même résultat.", le "pas forcément" me gène, car dans le cas où
hash("ABC") == hash("ABC"+grain), c'est qu'il y a un pépin (collision) donc vaut mieux revoir son choix d'algo de hachage...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
6
7 juil. 2014 à 20:00
7 juil. 2014 à 20:00
Bonjour
Je suis désolé je n'arrive pas à organiser dans ma page authentification la condition
Je vous joint mon fichier si vous pouvez m'aider.
Je vous remercie beaucoup
Je suis désolé je n'arrive pas à organiser dans ma page authentification la condition
if(Security::hash($_POST['pass']) == $data['pass']) { // Mot de passe correct }
Je vous joint mon fichier si vous pouvez m'aider.
Je vous remercie beaucoup
<?php if (!empty($_POST)) { if (!empty($_POST['login']) && (!empty($_POST['pass']))) { $login = trim($_POST['login']); //supprime les espaces en début et fin de chaine $login = htmlspecialchars($login, ENT_QUOTES); // supprime les caracteres speciaux html dans la chaine $login = stripslashes($login); // Supprime les antislashs d'une chaîne. $pass = trim($_POST['pass']); $pass = htmlspecialchars($pass, ENT_QUOTES); $pass = stripslashes($pass); $sql = ('SELECT * FROM tb_statut INNER JOIN (tb_gestion INNER JOIN ((tb_adherent INNER JOIN tb_adherent_gestion ON tb_adherent.id_adherent = tb_adherent_gestion.rid_adherent) INNER JOIN tb_adherent_statut ON tb_adherent.id_adherent = tb_adherent_statut.rid_adherent) ON tb_gestion.id_gestion = tb_adherent_gestion.rid_gestion) ON tb_statut.id_statut = tb_adherent_statut.rid_statut WHERE (((tb_statut.nom_statut)<>"Démission")) AND login=:login AND pass=:pass') or die(print_r($bdd->errorInfo())); $requete = $bdd->prepare($sql); $requete->execute(array( ':login' => $login, ':pass' => $pass )); $donnees = $requete->fetch(); if ($donnees['pass'] != $pass) { echo "<span class='erreur_connexion'>Mauvais mot de passe...ou Mauvais login...Merci de recommencer.</br> Peut-être n'êtes vous pas membre de la Clique ?</br>Dans ce cas désolé...</span>"; } else { $_SESSION['login'] = $login; $_SESSION['id_adherent'] = $donnees['id_adherent']; $_SESSION['nom'] = $donnees['nom']; $_SESSION['prenom'] = $donnees['prenom']; $_SESSION['adresse_mail'] = $donnees['adresse_mail']; $_SESSION['nom_gestion'] = $donnees['nom_gestion']; $_SESSION['nom_statut'] = $donnees['nom_statut']; redir("index.php?body=compte_profil&type=compte"); } } else { echo "<span class='erreur'>Veuillez remplir tous les champs !!!</span>"; } } ?>
JooS
Messages postés
2468
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 7/07/2014 à 21:04
Modifié par JooS le 7/07/2014 à 21:04
Ajoutez la méthode "clean" a la classe Security.
PS : J'allais essayé de corriger la requête, mais je ne comprend pas trop vos règles de jointures, et j'avoues que c'est une façon bizarre et pas trés élégante d'écrire une requête SQL.
Mettez en résolu quand c'est résolu ...
public static function clean($str) { return htmlspecialchars(trim($str)); }
<?php if (!empty($_POST)) { if (!empty($_POST['login']) && (!empty($_POST['pass']))) { // Nettoyer les chaines $login = Security::clean($_POST['login']); $pass = Security::clean($_POST['pass']); $pass = Security::hash($pass); $sql = 'SELECT * FROM tb_statut INNER JOIN (tb_gestion INNER JOIN ((tb_adherent INNER JOIN tb_adherent_gestion ON tb_adherent.id_adherent = tb_adherent_gestion.rid_adherent) INNER JOIN tb_adherent_statut ON tb_adherent.id_adherent = tb_adherent_statut.rid_adherent) ON tb_gestion.id_gestion = tb_adherent_gestion.rid_gestion) ON tb_statut.id_statut = tb_adherent_statut.rid_statut WHERE (((tb_statut.nom_statut)<>"Démission")) AND login = :login AND pass = :pass'; $requete = $bdd->prepare($sql); $requete->execute(array( ':login' => $login, ':pass' => $pass )); $donnees = $requete->fetch(); // Si la requete ne retourne rien if (empty($donnees)) { echo "<span class='erreur_connexion'>Mauvais mot de passe...ou Mauvais login...Merci de recommencer.</br> Peut-être n'êtes vous pas membre de la Clique ?</br>Dans ce cas désolé...</span>"; } else { $_SESSION['login'] = $login; $_SESSION['id_adherent'] = $donnees['id_adherent']; $_SESSION['nom'] = $donnees['nom']; $_SESSION['prenom'] = $donnees['prenom']; $_SESSION['adresse_mail'] = $donnees['adresse_mail']; $_SESSION['nom_gestion'] = $donnees['nom_gestion']; $_SESSION['nom_statut'] = $donnees['nom_statut']; redir("index.php?body=compte_profil&type=compte"); } } else { echo "<span class='erreur'>Veuillez remplir tous les champs !!!</span>"; } } ?>
PS : J'allais essayé de corriger la requête, mais je ne comprend pas trop vos règles de jointures, et j'avoues que c'est une façon bizarre et pas trés élégante d'écrire une requête SQL.
Mettez en résolu quand c'est résolu ...
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
6
7 juil. 2014 à 23:05
7 juil. 2014 à 23:05
Bonjour
Merci, merci beaucoup c'est nickel tout fonctionne.
Bonne semaine.
Merci, merci beaucoup c'est nickel tout fonctionne.
Bonne semaine.
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
6
24 juil. 2014 à 07:39
24 juil. 2014 à 07:39
Bonjour
Excusez moi de revenir sur mon problème, mais je ne sais pas pourquoi je n'arrive pas à me connecter.
Lorsque je viens de changer directement le pass dans ma BDD je peux me connecter mais sinon absolument pas.
Pouvez vous m'aider s'ils vous plait, je vous joint mon fichier de connexion.
Merci beaucoup
la fonction du hachage
Excusez moi de revenir sur mon problème, mais je ne sais pas pourquoi je n'arrive pas à me connecter.
Lorsque je viens de changer directement le pass dans ma BDD je peux me connecter mais sinon absolument pas.
Pouvez vous m'aider s'ils vous plait, je vous joint mon fichier de connexion.
Merci beaucoup
<?php //on teste si le visiteur a soumis le formulaire if (!empty($_POST)){ //on vérifie si le login et password ne sont pas vide, nulle ou non définie if (!empty($_POST['login']) && (!empty($_POST['pass']))){ $login = Security::clean($_POST['login']); $pass = Security::clean($_POST['pass']); $pass = Security::hash($pass); //on sélectionne les champs que l'on veut récupèrer et on teste les champs login et password $sql = ('SELECT * FROM tb_adherent WHERE login=:login AND pass=:pass ORDER BY nom, prenom') or die(print_r($bdd->errorInfo())); $requete = $bdd->prepare($sql); //on execute la requète en lui transmettant la liste des paramètres $requete->execute(array( ':login' => $login, ':pass' => $pass )); //on affiche les reponses de la requète dans un tableau $donnees = $requete->fetch(); //si le password est différent on met un message d'erreur if ($donnees['pass'] != $pass){ echo "<span class='erreur_connexion'>Mauvais mot de passe...ou Mauvais login...Merci de recommencer.</br> Peut-être n'êtes vous pas membre de la Clique ?</br>Dans ce cas désolé...</span>"; //sinon }else{ //on cré des variables accessibles depuis toutes les pages $_SESSION['login'] = $login; $_SESSION['id_adherent'] = $donnees['id_adherent']; $_SESSION['nom'] = $donnees['nom']; $_SESSION['prenom'] = $donnees['prenom']; $_SESSION['adresse_mail'] = $donnees['adresse_mail']; // Utiliser la redirection --------------- redir("index.php?body=compte_profil&type=compte"); } }else{ echo "<span class='erreur_connexion'>Veuillez remplir tous les champs !!!</span>"; } } ?>
la fonction du hachage
<?php //Méthode de hachage pour le password class Security{ const GRAIN = 'f?,j89-k0.;-!?lqjçs_di3%5a6_4jhfgh'; public static function hash($str){ return sha1(md5($str) . self::GRAIN . sha1($str . self::GRAIN) . $str); } public static function clean($str){ return htmlspecialchars(trim($str)); } } ?>
JooS
Messages postés
2468
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 25/07/2014 à 16:11
Modifié par JooS le 25/07/2014 à 16:11
La requête est supposé retourner un seul résultat au plus (puisque le login est unique), donc pas la peine de faire un ORDER BY.
La requête retourne un résultat vide si "le login existe mais le mot de passe est incorrect", ou si le login n'existe pas,
Sinon, elle retourne un résultat contenant un seul tuple dans le cas ou le login et le mot de passe sont corrects (en même temps).
Donc,
Revenez à la dernière version que j'ai posté.
https://forums.commentcamarche.net/forum/affich-30462420-mot-de-passe-crypter#6
Mettez en résolu quand c'est résolu ...
La requête retourne un résultat vide si "le login existe mais le mot de passe est incorrect", ou si le login n'existe pas,
Sinon, elle retourne un résultat contenant un seul tuple dans le cas ou le login et le mot de passe sont corrects (en même temps).
Donc,
Si résultat vide Afficher "Mauvais login ou mot de passe." Sinon Bienvenue.
Revenez à la dernière version que j'ai posté.
https://forums.commentcamarche.net/forum/affich-30462420-mot-de-passe-crypter#6
Mettez en résolu quand c'est résolu ...
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
6
27 juil. 2014 à 08:53
27 juil. 2014 à 08:53
Bonjour
Merci maintenant cela fonctionne très bien.
Merci
Merci maintenant cela fonctionne très bien.
Merci