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

Langage PHP Discussion :

[Sécurité] Vérifier code crypté en md5


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 27
    Points
    27
    Par défaut [Sécurité] Vérifier code crypté en md5
    Bonjour, j'utilise actuellement la protection de certains dossiers par fichier htaccess. Pour que mes utilisateurs puissent s'inscrire, je crypte leur mot de passe en md5 et je l'enregistre dans le dit fichier... seuleument j'aimerais pouvoir utiliser des mots de passe cryptés ailleurs que dans un fichier htaccess (p.ex. une base de données). S'il est facile de crypter et "quasi-théoriquement" impossible de décrypter le md5, il doit cependant bien y avoir moyen de comparer le mot de passe émis par l'utilisateur et la version cryptée dans la base de donnée (un problème de somme modulo? je ne sais pas...) comment s'y prend-t-on? Existe-t-il une commande qui permet une telle comparaison?

    Merci d'avance
    Vigon

  2. #2
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Il suffit de crypter le mdp que t'envoie l'utilisateur... La même manip que lorsque tu rentres le mdp dans la base à l'inscription, sauf qu'après tu ne fais que comparer.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 27
    Points
    27
    Par défaut je dois être lent...
    bon je crois que je dois être lent à la détente... mais je ne saisis pas...
    En fait, lorsque je code un mot de passe en md5, prenons par exemple "motdepasse" ça me donne un résultat différent à chaque fois, ce qui me semble logique. (dans cet exemple ça me donne une fois $1$GZtf2xqc$DDOmyI2FXllH1DtQieW./0

    et une autre fois
    $1$YMspuFRm$D6uf6GgJGzr5WcYLStz1X.

    c'est précisément cette "comparaison" que je n'arrive pas à faire
    si je mets un simple "if($mot_de_passe_test==$mot_de_passe_enregistre) je pense que ça ne marchera pas...?

    comment faire cette comparaison? merci d'avance

    Vig

  4. #4
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Non. md5 (comme tous les algos de hash) te donnera toujours le même résultat normalement. Sinon, aucun intérêt...
    Attention aux majuscules !

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    pourtant ça marchera.
    supposons le mot de passe crypté de l'user $mypass; lorsque l'utilisateur saisi un mot de la passe tu effectue la vérif comme suite
    if (md5($pass_saisi)==$mypass)

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 27
    Points
    27
    Par défaut non décidément non...
    bon je vais essayer d'être encore plus précis... voici un exemple que j'utiliise
    <?php
    echo $_POST['nom'].":".crypt($_POST['pass']);
    ?>

    p-e que ce qui fait la différence c'est que je suis hébergé (honte à moi) par Lycos (membres.lycos.fr), je sais pas, peut-être faudrait-il que je fixe la base du chiffrement? bizarre... mais vraiment j'obtiens à chauqe fois des réusltats différents, malgré que j'utilise ET le même login ET le même mot de passe.

    J'utilise le même code pour enregistrer mon fichier htpassword et ça marche très bien! (je veux dire mes utilisateurs, une fois enregistrés n'ont aucun mal à se connecter...)

    je suis perplexe

    VIG

  7. #7
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    $1$GZtf2xqc$DDOmyI2FXllH1DtQieW./0
    vu la tronche du résultat, tu as utilisé la fonction crypt(), qui insère un "salt" dans l'algo.

    Pour vérifier ton mot de passe il faut donc faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if( crypt( $mot_de_passe_saisi, $ancien_pass_crypte ) === $ancien_pass_crypte )
    {
        [...]
    }

  8. #8
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2003
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 274
    Points : 372
    Points
    372
    Par défaut
    moi j'ai une autre question. Si sur mon site j'enregistre le MDP crypté dans la base de données, comment je fais pour le renvoyer par mail à l'utilisateur si celui-ci a oublié son mot de passe ? => il faudrait le décrypter afin de pouvoir le renvoyer... Quelqu'un a une solution ?

  9. #9
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    Note : je précise que tu as bien raison de procèder ainsi, outre les gains en portabilité (crypt() est un standard sous Unix, et on le retrouve dans la plupart des applications), c'est bien plus "sécurisé" que la méthode bateau du md5().

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 27
    Points
    27
    Par défaut Au temps pour moi...
    "AuthType Basic" je viens de lire ça dans mon htaccess héhé sorry.

    Ceci dit, mes mots de passe cryptés commencent bien par $1$... vraiment je m'y perds... c fou parce que mon système fonctionne et moi qui croyais le comprendre, je n'y comprends plus rien... quid? est-il codé en basic ou en md5? (voir les exemple du "motdepasse" en version cryptée ci-dessus)

  11. #11
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    Citation Envoyé par eagleleader
    moi j'ai une autre question. Si sur mon site j'enregistre le MDP crypté dans la base de données, comment je fais pour le renvoyer par mail à l'utilisateur si celui-ci a oublié son mot de passe ? => il faudrait le décrypter afin de pouvoir le renvoyer... Quelqu'un a une solution ?
    tu lui envois un nouveau mot de passe, tout simplement.


    Et j'ajouterai même, pour éviter qu'un autre utilisateur remette à zéro le pass d'un autre : tu envoies par mail un lien avec un "jeton", valable 1 seule fois et pendant une courte durée (2 heures par exemple). Si l'utilisateur clique sur le lien, tu lui demande son nouveau mot de passe.

    Inconvénient : si la boite mail se fait hacker, pas très utile

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    WOW, un "===" ... c normal ça? (je précise que je suis un pur novice en progra)

  13. #13
    Membre éclairé Avatar de Yobs
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 675
    Points : 846
    Points
    846
    Par défaut
    Citation Envoyé par eagleleader
    moi j'ai une autre question. Si sur mon site j'enregistre le MDP crypté dans la base de données, comment je fais pour le renvoyer par mail à l'utilisateur si celui-ci a oublié son mot de passe ? => il faudrait le décrypter afin de pouvoir le renvoyer... Quelqu'un a une solution ?
    Tu réinitialise le mot de passe de l'utilisateur en générant un nouveau lorsque tu l'envoie par email et si besoin tu invite l'utilisateur à le modifier lors de sa première reconnexion.

  14. #14
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par vigon
    WOW, un "===" ... c normal ça? (je précise que je suis un pur novice en progra)
    "égal et de même type"

  15. #15
    Membre éclairé Avatar de Yobs
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 675
    Points : 846
    Points
    846
    Par défaut
    Citation Envoyé par vigon
    WOW, un "===" ... c normal ça? (je précise que je suis un pur novice en progra)
    == signifie égale à
    === signifie identique à (cad égale et du même type)

    Donc oui c'est permis. http://www.php.net/manual/fr/languag...comparison.php

    EDIT: grillé pas assez rapide. lol

  16. #16
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par Kioob
    Note : je précise que tu as bien raison de procèder ainsi, outre les gains en portabilité (crypt() est un standard sous Unix, et on le retrouve dans la plupart des applications), c'est bien plus "sécurisé" que la méthode bateau du md5().
    Perso j'ai un petit faible pour sha, mais je sais pas pourquoi ya pas d'implémentation de sha2 dans la distrib PHP...

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Bon, à cas désespéré, réponse désespérante...

    Je vais détailler chaque étape de ce que je fais...

    Pour cet exple jutiliserai le login "Test" et le mot de passe "raslebol"

    Je fais éxécuter le code php suivant:
    <?php
    echo $_POST['nom'].":".crypt($_POST['pass']);
    ?>

    Qui me retourne: "Test:$1$CyotdHNh$AF5dLq/m/Ww8sZT3vqPmZ1"

    Bon mnt, avec le commentaire Kioob, je fais:

    <?php
    if( crypt( "raslebol", "$1$CyotdHNh$AF5dLq/m/Ww8sZT3vqPmZ1" ) === "$1$CyotdHNh$AF5dLq/m/Ww8sZT3vqPmZ1" )
    {echo 'ça marche!';}
    else {echo 'ça ne marche PAS';}
    ?>

    et devinez ce qu'il me retourne... ça ne marche PAS! Alors !!! Quoique quesque où quand comment que je fais mal??????

  18. #18
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    il FAUT utiliser des guillements simples avec PHP. Sinon il remplace tes $1 par le contenu de la variable "$1".

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    roooooooooh put...... de m..... comment j'ai vraiment trop honte, la pure erreur de débutant! Heureusement qu'on ne travaille qu'avec des pseudos

    merci pour l'aide, et vraiment sorry de vous avoir fait perdre votre temps pour une connerie pareille...

    jen profite pour dire que c un très bon forum, suis impressioné par la vitesse de réponse...

  20. #20
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    Et bien, à bientôt, sur ce même forum

    Eusebius : pour ma part je reste sur crypt(). Donc si je veux un truc "mieux" que MD5, ce sera du blowfish.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. récupéré un code crypté dans un fichier .ini
    Par FracMaster dans le forum Langage
    Réponses: 2
    Dernier message: 27/04/2007, 12h49
  2. sécurité outlook code access
    Par maxeur dans le forum Sécurité
    Réponses: 4
    Dernier message: 31/01/2007, 09h55
  3. [Sécurité] crypt ou md5 ?
    Par Hayabusa dans le forum Langage
    Réponses: 5
    Dernier message: 21/01/2007, 23h46
  4. [Sécurité] Codage mot de passe md5
    Par tilou dans le forum Langage
    Réponses: 6
    Dernier message: 12/04/2006, 11h55
  5. code crypté
    Par apapeur10 dans le forum Langage
    Réponses: 2
    Dernier message: 27/01/2006, 18h13

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