Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème pour cryptage.

César n'a jamais eu à faire de php...

    15 juillet 2011 à 20:14:24

    Salut tout le monde. Bon, alors, je suis un gros zéro qui part vraiment de rien. Ce qui peut expliquer mes méthodes tordues à base de quelques fonctions dénichées à droite à gauche.

    Le php m'intéresse, et j'ai voulu créer un crypteur à la mode de césar, c'est à dire que chaque lettre est remplacé par une seule et unique lettre, décalé d'un nombre i dans l'alphabet.

    voilà mon code :

    <?php
    $phrase  = $_GET['phrase']; //ici c'est la phrase de base, qui sera cryptée.
    $phrase .= "</p>"; //pour pas s'emmêler les pinceaux.
    echo $phrase;
    $chiffre = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'); //ici, l'array de base. J'avais prévu de décaler chaque caractère dans le tableau, mais je n'ai pas trouvé de fonction pour ça.
    function modulo($nb, $diviseur) //une fonction modulo pour faire faire une boucle à l'alphabet quand on le décale. Après Z, il y a A...
        { 
         $q = intval($nb/$diviseur); 
         return $nb - $diviseur*$q; 
        } 
    $i = $_GET['chiffre'];//le décalage du nombre 
    $e = $i+25;
    while ($i <= $e) {
        $mod= modulo($i,26);
        $chiffre[$mod];
        $string .= $chiffre[$mod]; //Là, j'ai eu l'idée d'afficher l'array du tableau, de le décaler grâce à la fonction modulo et de le faire passer dans une chaine, que je rassemble ensuite dans un tableau grâce à explode.
        $string .=  ' ';//le séparateur pour explode.
        $i++;}
    $del = ' ';
    $crypt = explode($del, $string, 27);
    $phrase2 = str_replace($chiffre, $crypt, $phrase); // la phrase cryptée.
    echo $phrase2;
    ?>
    


    Sur le papier ça marche bien, le problème, c'est que $phrase2 renvoie la phrase cryptée seulement avec les i premiers caractères de la chaine rassemblée grâce à explode. décaler de 25 lettres rend un cryptage à peu près potable, mais de 3, c'est l'horreur. Je ne comprends pas d'où ça vient. Quelqu'un peut m'expliquer ? Merci !
    • Partager sur Facebook
    • Partager sur Twitter
      15 juillet 2011 à 20:28:35

      Salut, tu t'es un peu compliqué la vie je pense :p

      <?php
      $phrase = $_GET['phrase'];
      $decalage = $_GET['chiffre'];
      
      $phrase_cryptee = '';
      for ($i=0; $i <strlen($phrase); $i++) {//On itère sur l'ensemble de la phrase
      $lettre = substr ($phrase,$i,1);//On récupère la lettre à l'indice $i
      $nombre = ord($lettre)-97;//la fonction ord recupère le code ASCII de la lettre $lettre. Code ASCII de a 97, de b 98, de c 99,... D'où le - 97 pour se ramener à 0.
      $nombre = ($nombre + $decalage)%26 +97 //On décale la lettre de $decalage et on utilise %26 pour le modulo, on remet +97 pour le codage ASCII
      $phrase_cryptee .= chr ($nombre); //On ajoute la lettre décalée à la phrase cryptée. La fonction chr est la fonction inverse de ord, elle renvoie le caractère en fonction du code ASCII
      }
      
      echo $phrase;
      echo '<br/>';
      echo $phrase_cryptee;
      
      • Partager sur Facebook
      • Partager sur Twitter
        15 juillet 2011 à 20:41:22

        Ha, ha, Ulspider, tu viens de détruire ma journée \o/

        Le seul problème de ton code est qu'il gère très mal les espaces... Mais bon, if, else, quoi...

        Merci !
        • Partager sur Facebook
        • Partager sur Twitter

        Problème pour cryptage.

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown