IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

Encrypter un mot de passe en MD5


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 128
    Points : 62
    Points
    62
    Par défaut Encrypter un mot de passe en MD5
    Bonjour,

    Je voudrais crypter un mot de passe en MD5 juste avant de le comparer à celui entrer dans la table. Evidemment c'est le meme mot de passe que je compare.

    Voici le mdp dans la table:
    83878c91171338902e0f

    et voici le code php qui doit encrypter le mot de passe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    include("connexionMYSQL.php");
     
      $sql=mysql_query("select id_user from utilisateurs where login_user = '".$_REQUEST['login']."' 
     AND pass_user = '".md5($_REQUEST['mdp'])."'");
     
      if (mysql_num_rows($sql) > 0){
    		while($row=mysql_fetch_assoc($sql))
    			$output[]=$row;
    		print(json_encode($output));
    		return true;
    	}
    	else {
    		exit;
    		return false;
    	}
    include("deconnexionMYSQL.php");
    ?>
    J'espere que vous pourrez m'aider.

    Cordialement

  2. #2
    Invité
    Invité(e)
    Par défaut


    2 remarques avant de parler de ton sujet :
    • L'utilisation de la librairie "mysql" est déconseillée, elle sera même obsolète en PHP 5.5. Regarde du côté de "mysqli", voire mieux, de "PDO". Si tu es bloqué sur cette librairie à cause d'un décideur ou d'un client qui te l'impose, dis-lui qu'il s'expose à de graves failles de sécurité. Si tu utilises cette librairie parce que tu débutes en PHP, cherche quelques tutoriels
    • L'utilisation de paramètres de requête HTTP directement dans une requête SQL est une énorme faille de sécurité. Heureusement PHP met à ta disposition des fonctions pour s'en prémunir (tape "mysql escape string" dans le moteur de recherche de http://fr.php.net)


    Ceci étant dit, pour que l'on puisse t'aider, dis-nous à quelle étape tu es bloqué, quel résultat tu obtiens, etc.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 128
    Points : 62
    Points
    62
    Par défaut
    Salut,

    Bon tu viens de me jeter un froid la lol. Ben pour l'utilisation de la librairie va falloire que je change.
    Et idem pour la sécurité. Surtout que la va venir un gros projet. Enfin..

    Donc pour mon problème tout simplement au moment de l'authentification, il n'accède pas à la page suivante étant donné qu'il ne retrouve pas le bon mot de passe.
    Sois un problème de syntaxe, soit je m'y prends trèèès mal je comprends pas.

    j'ai encrypter un mot de passe dans ma table.
    Je veux comparé le mot de passe entré par l'utilisateur et le mot de passe dans la table (qui lui est donc encodé).
    Je l'ai encodé dans le meme encodage que dans la table afin de pouvoir bien les comparer.
    Cependant il ne les reconnait pas.

    Je voudrais juste savoir comment vous vous y prennez pour faire cela, et peut etre m'aider en fonction de mon code.

    Merci pour vos réponses

  4. #4
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ruyeken Voir le message
    Et idem pour la sécurité. Surtout que la va venir un gros projet. Enfin..
    Côté sécurité, abandonnes dès maintenant le cryptage en md5 aussi, qui n'est plus considéré comme suffisamment sûr, pour lui préférer du sha256 (ou, au moins, du sha1).
    Enfin, prends l'habitude de toujours sécuriser ce qui vient de l'utilisateur (donc données en post, en get, comme en bdd).
    Le minimum (si tu ne passes pas sous PDO) est d'utiliser la fonction mysql_real_escape_string lors des requêtes en base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      $sql=mysql_query('select id_user from utilisateurs where login_user = '".mysql_real_escape_string($_REQUEST['login']).'" AND pass_user = "'.md5($_REQUEST['mdp']).'"');
    Concernant ton problème, ta requête s'exécute bien ?
    Quand tu affiches le contenu de md5($_REQUEST['mdp']), tu as la bonne chaîne d'affichée ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bien vu @k'amm, le md5 n'est clairement plus recommandé non plus...

    Pour ce qui est de la chaîne de caractères qui est différente en faisant un md5 de celle récupérée en base, as-tu pensé à vérifié que la longueur maximale de ton champ en base est suffisante pour stocker des chaînes encodées en md5 ?

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 128
    Points : 62
    Points
    62
    Par défaut
    Bon je vous remercie pour votre aide le problème est résolue !!

    En fait c'est un truc tout con. J'avais pas affecter assez de place dans ma table pour stocker la chaine codée.

    J'ai donc suivie vos conseil et utilisé du sha1.

    cependant j'aurais une question par rapport à cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .mysql_real_escape_string
    Pouvez-vous m'expliquer a quoi sert précisément cette fonction ?

    Ques ce que PDO ? si tu dis que pour la sécurité c'est ce qu"il y a de mieux j'aimerais étudier cette possibilité.

    Merci beaucoup

  7. #7
    Invité
    Invité(e)
    Par défaut
    Si ton problème est résolu, merci de le signaler par le bouton présent sous la discussion

    La fonction mysql_real_escape_string(), elle aussi obsolète à partir de PHP 5.5 et remplacée par les fonctions de mysqli ou PDO, protège une chaîne de caractères contre les attaques par injection SQL (si tu ne sais pas ce que c'est, une petite recherche Google te renseignera).

    PDO est une bibliothèque PHP d'abstraction d'accès à une base de données, qui fournit une API orientée objet pour manipuler une connexion, une requête et ses résultats.
    Dernière modification par Domi2 ; 21/02/2013 à 08h20. Motif: Lien non pérenne

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Citation Envoyé par ruyeken Voir le message

    J'ai donc suivie vos conseil et utilisé du sha1.
    Bonsoir,

    Si comme tu dis c'est destiné à être un gros projet (et donc à durer), n'utilise pas non plus sha1. md5 et sha1 ne sont plus aussi sûrs. Si tu as PHP 5.3, utilises plutôt bcrypt , c'est à dire crypt() avec CRYPT_BLOWFISH.
    Sinon, tu utilise au moins, comme conseillé, sha256 ou sha512.

    Et je plussoie ce qui a été dit: passe à PDO et aux paramètres liées.

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Oui concernant le hashage, sha256 est le minimum actuel recommandé
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $hash = hash("sha256",$var);
    Faudra (re)penser à adapter la longueur de ton champ en bdd en fonction : 64 pour sha256, ou 128 pour sha512

    Sinon pour le reste en plus de ce qui as déjà été dit, il faut absolument éviter d'utiliser $_REQUEST pour des problèmes évidents de sécurité.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Encryption de mot de passe, best practice
    Par Baquardie dans le forum Développement
    Réponses: 1
    Dernier message: 22/04/2010, 20h35
  2. Comment crypter les mots de passe avec MD5 ?
    Par Fngonka dans le forum ASP.NET
    Réponses: 19
    Dernier message: 31/07/2008, 10h48
  3. [cryptage] mot de passe en MD5
    Par afrodje dans le forum VB.NET
    Réponses: 17
    Dernier message: 11/02/2008, 16h29
  4. Mysql convertir mot de passe en md5
    Par jcaspar dans le forum Administration
    Réponses: 18
    Dernier message: 04/09/2007, 10h30
  5. Encrypter un mot de passe
    Par loukili81 dans le forum Langage
    Réponses: 3
    Dernier message: 07/05/2007, 15h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo