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

PHP & Base de données Discussion :

[débutante] test sur le mot de passe avec smd5 [Débutant(e)]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 80
    Points : 54
    Points
    54
    Par défaut [débutante] test sur le mot de passe avec smd5
    Bonjour, je ne sais pas si c'est le bon endroit pour poser cette question

    Je suis en PHP et dans la base mySQL, les mots de passe sont cryptés en smd5.

    L'utilisateur qui veut se connecter tape son mot de passe et je veux voir s'il est correct.

    Comment faire pour le tester ?

    J'ai testé des choses et il s'avère que pour un mot de passe les 12 premiers caractères du crypté et du en clair sont identiques mais pas la fin. Est-ce normal ?

    Merci d'avance.

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    En fait, tu ne testes pas le mot de passe en clair, vu que c'est impossible de décrypter ce qu'il y a dans la base.
    Donc tu cryptes le mdp envoyé et tu compares ce résultat à la donnée en base.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 80
    Points : 54
    Points
    54
    Par défaut
    Je me suis mal exprimée désolée.
    Justement je crypte le mot de passe en clair et je comparre à celui en base... mais à part les 12 premiers caractères rien n'est identique.
    Je voulais savoir si c'était normal pour ce type de cryptage ou non. (pour savoir comment faire mes tests)

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Il te manque sûrement le "grain de sel" : smd5 est pour "salted md5" c'est à dire qu'il faut en plus connaître ce fameux grain de sel pour pouvoir crypter à l'identique.
    Il est souvent mis dans un fichier de config commun. Tu peux aussi chercher une variable $seed, c'est un nom assez commun.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  5. #5
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 80
    Points : 54
    Points
    54
    Par défaut
    olala ça se complique. Merci pour le grain de sel, je pars à sa recherche

  6. #6
    Membre confirmé Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Points : 627
    Points
    627
    Par défaut
    En fait, quand tu traites ton formulaire, tu fais une fonction de hashage avec md5().

    Normalement, si le mot de passe a été hashé avec la même fonction, la comparaison sera bonne !

    Je ne connais pas la fonction smd5, seulement la md5 et elle renvoie les mêmes caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    echo md5('Mathieu').'<br>';
    echo md5('Mathieu');
    ?>
    donne
    206299fa740a4327a61b67b6be5c8373
    206299fa740a4327a61b67b6be5c8373
    Cette fonction est très bien supportée par MySQL, donc refais ton test avec cette fonction sinon... il doit y avoir un autre problème...

    Si ça ne fonctionne pas, donne nous ton code pour qu'on y voit plus clair
    GAMIN !!!!
    _______________________________________________
    PHP 5.2 | Apache 2 | MySQL 5 | WinXP Pro | Mac OSX

  7. #7
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 80
    Points : 54
    Points
    54
    Par défaut
    Alors apparemment le grain de sel était directement dans la fonction.
    (le cryptage a été effectué pour une autre applique la mienne et je recupere des données dans la base de données de cette apli donc ce code n'est pas le mien mais je le réutilise)

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    function auth_verifyPassword($clear,$crypt){
     
     
      $method='';
      $salt='';
     
      //determine the used method and salt
      $len = strlen($crypt);
      if(substr($crypt,0,3) == '$1$'){
        $method = 'smd5';
        $salt   = substr($crypt,3,8);
      }elseif(substr($crypt,0,6) == '{SSHA}'){
        $method = 'ssha';
        $salt   = substr(base64_decode(substr($crypt, 6)),20);
      }elseif($len == 32){
        $method = 'md5';
      }elseif($len == 40){
        $method = 'sha1';
      }elseif($len == 16){
        $method = 'mysql';
      }elseif($len == 41 && $crypt[0] == '*'){
        $method = 'my411';
      }else{
        $method = 'crypt';
        $salt   = substr($crypt,0,2);
      }
     
        if($clear==$crypt)
        {
            return true;      
        }
     
      echo "<br>crypté : $crypt";
      $bla = auth_cryptPassword($clear,$method,$salt);
      echo "<br>on crypte ça : $bla";
     
     
      //crypt and compare
      if(auth_cryptPassword($clear,$method,$salt) === $crypt){
          return true;
      }
      return false;
    }
    et

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    function auth_cryptPassword($clear,$method='',$salt=''){
     
      global $conf;
      if(empty($method)) $method ='smd5';
     
      //prepare a salt
      if(empty($salt)) $salt = md5(uniqid(rand(), true));
     
      switch(strtolower($method)){
        case 'smd5':
            return crypt($clear,'$1$'.substr($salt,0,8).'$');
        case 'md5':
          return md5($clear);
        case 'sha1':
          return sha1($clear);
        case 'ssha':
          $salt=substr($salt,0,4);
          return '{SSHA}'.base64_encode(pack("H*", sha1($clear.$salt)).$salt);
        case 'crypt':
          return crypt($clear,substr($salt,0,2));
        case 'mysql':
          //from http://www.php.net/mysql comment by <soren at byu dot edu>
          $nr=0x50305735;
          $nr2=0x12345671;
          $add=7;
          $charArr = preg_split("//", $clear);
          foreach ($charArr as $char) {
            if (($char == '') || ($char == ' ') || ($char == '\t')) continue;
            $charVal = ord($char);
            $nr ^= ((($nr & 63) + $add) * $charVal) + ($nr << 8);
            $nr2 += ($nr2 << 8) ^ $nr;
            $add += $charVal;
          }
          return sprintf("%08x%08x", ($nr & 0x7fffffff), ($nr2 & 0x7fffffff));
        case 'my411':
          return '*'.sha1(pack("H*", sha1($clear)));
        default:
          msg("Unsupported crypt method $method",-1);
      }
    }

    les tests :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      echo "<br>crypté : $crypt";
      $bla = auth_cryptPassword($clear,$method,$salt);
      echo "<br>on crypte ça : $bla";
    Resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    crypté : $1$d7513e4f$FDEh7YeFxf6R8OCKJdVgl/
    on crypte ça : $1$d7513e4f$V0KytImsRVULo/aHG/uHn.

  8. #8
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Et tu mets quoi dans $salt ?
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  9. #9
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 80
    Points : 54
    Points
    54
    Par défaut
    Dans la premiere fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $salt   = substr(base64_decode(substr($crypt, 6)),20);
    et dans la seconde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(empty($salt)) $salt = md5(uniqid(rand(), true));
    ...
    Aaaaa faut que je trouve quoi mettre dans le $salt pour éviter qu'il me fasse un rand donc.....


    Je dois partir je reviens sur ce pb demain matin ><

    Merci beaucoup en tout cas !
    En espérant vous revoir demain

Discussions similaires

  1. Test du nouveau mot de passe avec metacaractère
    Par dubis dans le forum Programmation et administration système
    Réponses: 5
    Dernier message: 28/01/2014, 10h54
  2. Test sur le mot de passe
    Par mdh12 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 14
    Dernier message: 24/02/2010, 16h39
  3. Entrer un identifiant et un mot de passe avec VBS sur un site
    Par Heavy Metal Hero dans le forum VBScript
    Réponses: 2
    Dernier message: 07/12/2008, 15h48
  4. Réponses: 2
    Dernier message: 17/09/2006, 19h21
  5. [débutant] test sur un évènement
    Par heider dans le forum Langage
    Réponses: 4
    Dernier message: 07/10/2005, 00h44

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