Groupe PhP

Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Groupe PhP

Forum du groupe d'apprentissage mutuel en PHP

-55%
Le deal à ne pas rater :
Coffret d’outils – STANLEY – STMT0-74101 – 38 pièces – ...
21.99 € 49.04 €
Voir le deal

+3
Fuchie
Darkwarrios
ptitpunk
7 participants

    [Exercice]Crypteur

    ptitpunk
    ptitpunk
    Admin
    Admin


    Messages : 111
    Date d'inscription : 05/09/2009
    Age : 30

    [Exercice]Crypteur Empty [Exercice]Crypteur

    Message par ptitpunk Sam 5 Sep - 19:12

    Allez je me lance pour le premier exercice spécial débutant (en même temps on l'est tous un peu hein?). Il s'agit d'un crypteur !!! clown
    Difficulté: Like a Star @ heaven
    Exercice: Réaliser un crypteur de mots de passes (c'est le seul qui m'est venu subitement à l'idée ) Razz
    Vous aurez donc, un input où on rentre le mot de passe à crypter, et un autre qui envoie le formulaire...
    Après personnalisez le comme vous voulez et montrez le résultat Wink
    Une fois le formulaire envoyé, affichez le mot de passe cryté, et une petite variante si vous voulez ajouter du piment au code, affichez le mot de passe original ! Twisted Evil
    Eléments:Vous aurez donc besoin de la fonction
    Code:
    sha1()

    qui s'occupe de cryter le contenu en sha1 (pour moi, la meilleure méthode de cryptage) ... Vous pouvez aussi utiliser
    Code:
    md5()
    qui est tout aussi sûr ! cyclops

    A vos clavier ! pirat Twisted Evil Twisted Evil Twisted Evil Twisted Evil


    Dernière édition par ptitpunk le Sam 5 Sep - 19:18, édité 1 fois
    Darkwarrios
    Darkwarrios
    Admin & Soutien PHP
    Admin & Soutien PHP


    Messages : 67
    Date d'inscription : 05/09/2009

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par Darkwarrios Sam 5 Sep - 19:14

    je peux jouer moi aussi ? Laughing
    ptitpunk
    ptitpunk
    Admin
    Admin


    Messages : 111
    Date d'inscription : 05/09/2009
    Age : 30

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par ptitpunk Sam 5 Sep - 19:15

    Oui !!!
    Tout le monde peut jouer ! What a Face
    Darkwarrios
    Darkwarrios
    Admin & Soutien PHP
    Admin & Soutien PHP


    Messages : 67
    Date d'inscription : 05/09/2009

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par Darkwarrios Sam 5 Sep - 19:23

    Code:
    <?php
              if (!empty($_POST['mot_de_passe'])){
                  $_POST = array_map('mysql_real_escape', $_POST);
                  $mot_de_passe = sha1($_POST['mot_de_passe']);

                            echo 'Mot de passe original :<strong>' .$_POST['mot_de_passe'].'</strong> , mot de passe crypté :<strong>'  .$mot_de_passe.'</strong>';
            }
              else{
                    echo 'Donne moi ton mot de passe, sinon tu passes pas ! xD';
              }
    ?>
            <form action="page.php" method="post">
                  <div>Votre mot de passe SVP monsieurs ! (mouhahaha ^^)</div>
                  <div><input type="password" name="mot_de_passe" /></div>
          </form>
    ptitpunk
    ptitpunk
    Admin
    Admin


    Messages : 111
    Date d'inscription : 05/09/2009
    Age : 30

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par ptitpunk Sam 5 Sep - 19:56

    Le premier participant a déjà posté son code !
    Par contre essaye d'expliquer la fonction :
    Code:
    array_map('mysql_real_escape', $_POST)
    Parce que les débutants ne la connaissent pas forcément (moi par exemple j'aimerais bien savoir à quoi ça sert xD)
    avatar
    Fuchie
    Novice PHP
    Novice PHP


    Messages : 6
    Date d'inscription : 05/09/2009

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par Fuchie Sam 5 Sep - 20:29

    La fonction array_map sert à appliquer une fonction sur un tableau. A noter quelle renvoi un array.

    Par exemple, supposons que vous ayez un tableau contenant des nombres, et que vous souhaitiez mettre tous ces nombres au carré. Voilà ce que vous pouvez faire avec cette fonction :
    Code:
    <?php

    //Notre fonction, rien de bien compliqué
    function carre($nbre)
    {
        return($nbre * $nbre);
    }

    $nombres = array(1, 2, 3); //notre array
    $resultat = array_map("carre", $nombres); // on applique la fonction sur chaque nombre.

    print_r($resultat); // on affiche le contenu de l'array "resultat"
    Par ailleurs, cette fonction n'est à utiliser que lorsque vous avez un grand nombre de données à protéger. Dans le cas contraire, un simple mysql_real_escape_string suffit.

    Au fait, dans le cas ci-dessus, l'utilisation d'array_map est incorrecte.

    Pour finir, n'utilisez jamais md5 tout court pour crypter vos données. De nombreuses tables (les rainbow tables) existent sur le net, et contiennent un grand nombre de mots et de MD5.

    Je posterai ma participation à la fin, histoire de ne pas fausser les résultats Wink
    ptitpunk
    ptitpunk
    Admin
    Admin


    Messages : 111
    Date d'inscription : 05/09/2009
    Age : 30

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par ptitpunk Sam 5 Sep - 20:51

    Pour répondre à Fuchie :
    Oui je suis d'accord, il existe bel et bien une sorte de dico de pleins de mot de passes et leurs correspondance en md5 ou en sha1 (à noter qu'il existe encore une autre méthode beaucoup moins sécurisée, cryp() ), et il est vraiment aisé de retrouver un mot de passe...
    Cependant une alternative existe :
    En effet, vous pouvez doubler voir tripler le cryptage ! Shocked
    Voici un exemple concret :
    Code:
    md5(md5($mot))
    Vous pouvez même mélange les méthodes de cryptage :
    Code:
    md5(sha1(crypt($mot)))
    avatar
    Emm@nuel
    Novice PHP
    Novice PHP


    Messages : 5
    Date d'inscription : 05/09/2009

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par Emm@nuel Sam 5 Sep - 21:35

    Il me semble que crypt n'est pas à utiliser si tu veux protégé un mot de passe qui va être enregistré dans une B.D.D. tout simplement parce que le résultat n'est pas toujours le même !
    ptitpunk
    ptitpunk
    Admin
    Admin


    Messages : 111
    Date d'inscription : 05/09/2009
    Age : 30

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par ptitpunk Dim 6 Sep - 9:05

    Oui, tu as raison crypt() est utile seulement pour crypter des informations secondaires (mots de passes exempt)... Razz
    avatar
    Fuchie
    Novice PHP
    Novice PHP


    Messages : 6
    Date d'inscription : 05/09/2009

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par Fuchie Dim 6 Sep - 11:17

    Juste à titre informatif, on peut faire une comparaison de mots de passes avec la fonction crypt si on réutilise la clé de base pour la comparaison (désolé, je ne sais pas trop comment expliquer ça).

    Par exemple :
    Code:
    $crypt = crypt('poulpe');
    $crypt2 = crypt('poulpe', $crypt);

    echo 'Crypt 1 : '.$crypt.' <br />
          Crypt 2 : '.$crypt2;
    Ces deux variables renverront le même hash.

    Code:
    <?php
    // laissons le salt initialisé par PHP
    $password = crypt('mypassword');

    if (crypt($user_input, $password) == $password) {
      echo "Mot de passe correct !";
    }
    ?>
    Côté sécurité je ne sais pas ce que ça donne, mais je sais qu'elle est suffisamment sécurisée pour être utilisée dans les .htpasswd.
    Darkwarrios
    Darkwarrios
    Admin & Soutien PHP
    Admin & Soutien PHP


    Messages : 67
    Date d'inscription : 05/09/2009

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par Darkwarrios Dim 6 Sep - 11:55

    perso je n'utilise jamais crypt(), on a des fonctions plus élaborées comme sha1() ou bien md5() qui sont basiques est suffisante ^^

    quand au embrications de hachage, sha1(md5(sha1(md5(md5(...)))), je n'en vois pas trop l'intérêt, à la limite, sha1(md5()) pour plus de sécurité, mais après en rajouté trop ce n'est pas la peine ^^
    Single Dark
    Single Dark
    Débutant PHP
    Débutant PHP


    Messages : 63
    Date d'inscription : 06/09/2009
    Age : 35
    Localisation : Brest

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par Single Dark Lun 7 Sep - 15:11

    Il reste uns solution simple pour augmenter ça. Le grain de sel...

    Il suffit de rajouter un ou plusieur mot avec le mot de passe de l'utilisateur.

    Exemple :

    Code:

    <?php

    $prefix_secu = 'gR@1n2S3L';
    $suffix_secu = '2L@M0rTK!Tu3';

    $password = md5 ($prefix_secu.$_POST['password'].$suffix_secu);

    ?>

    Et voilà. Simple, efficace...
    Berdes1
    Berdes1
    Soutien PhP
    Soutien PhP


    Messages : 167
    Date d'inscription : 06/09/2009

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par Berdes1 Lun 7 Sep - 19:19

    Le mieux étant d'avoir un salt constant (comme dans ton code) et un salt dynamique qui doit, bien sûr, être stocké dans la BDD. C'est pour ça qu'on à l'habitude d'utiliser le pseudo, le timestamp d'inscription ou encore l'adresse mail.
    On peut aussi corser le tout en rajoutant des opérateurs binaires sur le salt dynamique :
    Code:
    <?php
    $prefix_secu = '2L@M0rTK!Tu3';
    $suffix_secu = ~($mail.$pseudo)^($pseudo.$mail);

    Et si on est vraiment maniaque, on utilise l'aléatoire en initialisant le générateur de nombre aléatoire avec le timestamp d'inscription (un peu modifié, bien sûr) :
    Code:

    srand(pow($timestamp_inscription, PI));
    $prefix_secu = '2L@M0rTK!Tu3';
    $suffix_secu = ~($mail.$pseudo)^($pseudo.$mail);
    $mdp_md5 = str_shuffle(md5(str_shuffle($prefix_secu.$_POST['password'].$suffix_secu)));

    Avec ça, si quelqu'un arrive à trouver le mot de passe d'origine en ne possédant que le "md5", je dit plus que bravo Rolling Eyes .
    oimat
    oimat
    Novice PHP
    Novice PHP


    Messages : 29
    Date d'inscription : 05/09/2009

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par oimat Lun 7 Sep - 19:40

    non :p
    si tu mets str_shuffle, tu as de l'aléatoire
    et tu peux pas mettre de l'aléatoire dans un cryptage, car ça donnera jamais pareil :p
    Berdes1
    Berdes1
    Soutien PhP
    Soutien PhP


    Messages : 167
    Date d'inscription : 06/09/2009

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par Berdes1 Lun 7 Sep - 19:45

    Et tu pense qu'initialiser le générateur d'aléatoire avec un chiffre connu, ça sert à quoi?

    En informatique, on ne parle pas d'aléatoire, mais de pseudo-aléatoire. En réalité, quand tu fait de l'"aléatoire", l'ordinateur prend une valeur de départ, de laquelle découle toutes les autres valeurs, avec le même nombre de départ, tu obtient toujours les mêmes nombres.

    Teste ce code plusieurs fois, même si il y a du pseudo-aléatoire, tu auras toujours le même résultat.
    Une fois que tu auras vu ça, change l'argument de srand et/ou supprime la ligne.
    Voici le code :
    Code:
    <?php
    srand(1051);
    echo rand().'<br />';
    echo rand().'<br />';
    echo rand().'<br />';
    ?>

    EDIT : je te paris qu'avec le code que je te donne, tu va obtenir 301461662, 269393155 et 1210161616...
    oimat
    oimat
    Novice PHP
    Novice PHP


    Messages : 29
    Date d'inscription : 05/09/2009

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par oimat Lun 7 Sep - 20:58

    et bah non!

    10680
    913
    25334
    alors ton pseudo-aléatoire, même s'il est pseudo, ta théorie marche pas


    EDIT : cependant, c'est vrai qu'en réactualisant la page, j'ai toujours pareil
    Berdes1
    Berdes1
    Soutien PhP
    Soutien PhP


    Messages : 167
    Date d'inscription : 06/09/2009

    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par Berdes1 Lun 7 Sep - 21:20

    Dans ce cas, il doit y avoir un truc spécifique à la machine, par exemple, le nom du fichier...
    En tout cas, j'ai déjà fait ça sur un serveur et j'avais pas eu de problèmes...

    Contenu sponsorisé


    [Exercice]Crypteur Empty Re: [Exercice]Crypteur

    Message par Contenu sponsorisé


      La date/heure actuelle est Dim 19 Mai - 12:25