Vigenere [Résolu]

Signaler
Messages postés
19
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
12 décembre 2019
-
jun_1393
Messages postés
19
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
12 décembre 2019
-
bonjours
je travail sur un code Vigenère suivant (sa validation)
cependant je n'arrive pas à résoudre le problème. merci de votre aide.
 <?php
require_once('Crypto.php');
$crypto = new Crypto();
// initialise les variables
$key = "";
$code = "";
$error = "";
$valid = true;
$file_cle = file("/Clef/cle.txt", FILE_IGNORE_NEW_LINES);
$file_mondic = file("/Clef/mondic.txt", FILE_IGNORE_NEW_LINES);

// si le formulaire a été envoyé
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    
// set les variables
    $key = $_POST['key'];
    $code = $_POST['code'];
foreach ($file_cle as $key){

// regarder si le clé a été mis
    if (empty($_POST['key'])) {
        $error = "Veuillez entrer une clé!";
        $valid = false;
    } // regarder si la clé a été envoyé
    else if (empty($_POST['code'])) {
        $error = "Veuillez entrer du texte à décoder";
        $valid = false;
    } // regarder si la clé est en alphanumeric
    else if (isset($_POST['key'])) {
        if (!ctype_alpha($_POST['key'])) {
            $error = "la clé ne doit que contenir des lettres";
            $valid = false;
        } // regarder si la clé est dans le dictionnaire *utiliser le fichier mondic.txt
    } else if ($key!==$file_mondic) {
		$error = "la clé ne se trouve pas dans le dictionnaire";
        $valid =false;
    }

        //regarder si la clé est dans le fichier cle.txt *utiliser le fichier cle.txt*
     else if ($key!==$file_cle){
	 $valid = false;
	 }

    }
}

// si le input est valide
        if ($valid) {
// si le bouton encode a été clicker
            if (isset($_POST['encrypt'])) {

                $code = $crypto->encoder($key, $code);
                $error = "texte encodé!";

            }

// si le bouton décripter a été clicker
            if (isset($_POST['decrypt'])) {
                $code = $crypto->decoder($key, $code);
                $error = "texte décodé!";

            }

}




 <?php

interface ICryptographie
{
    public function encoder($key, $text);

    public function decoder($key, $text);
}

class Crypto implements ICryptographie
{

    // fonction pour encoder un texte
    function encoder($key, $text)
    {
        // changer la clé en minuscule
        $key = strtolower($key);

        // initialise les variables
        $code = "";
        $ki = 0;
        $kl = strlen($key);
        $length = strlen($text);
        $text .= ' ';

        // iterate over each line in text
        for ($i = 0; $i < $length; $i++) {
            // si la lettre est en alpha, l'encoder
            if (ctype_alpha($text[$i])) {
                // Majuscule
                if (ctype_upper($text[$i])) {
                    $text[$i] = chr(((ord($key[$ki]) - ord("a") + ord($text[$i]) - ord("A")) % 26) + ord("A"));
                } // minuscule
                else {
                    $text[$i] = chr(((ord($key[$ki]) - ord("a") + ord($text[$i]) - ord("a")) % 26) + ord("a"));
                }

                // mettre à jour l'index de la clé
                $ki++;
                if ($ki >= $kl) {
                    $ki = 0;
                }
            }else if($text[$i] == ' ' ){
                $text .=' ';
            }
        }

        // retourner le code encoder
        return $text;
    }

// fonction pour décoder le texte
    function decoder($key, $text)
    {
        // changer la clé en minuscule
        $pswd = strtolower($key);

        // initialise les variables
        $code = "";
        $ki = 0;
        $kl = strlen($key);
        $length = strlen($text);

        // iterate over each line in text
        for ($i = 0; $i < $length; $i++) {
            // si la lettre est en alpha, la décripter
            if (ctype_alpha($text[$i])) {
                // majuscule
                if (ctype_upper($text[$i])) {
                    $x = (ord($text[$i]) - ord("A")) - (ord($key[$ki]) - ord("a"));

                    if ($x < 0) {
                        $x += 26;
                    }

                    $x = $x + ord("A");

                    $text[$i] = chr($x);
                } // minuscule
                else {
                    $x = (ord($text[$i]) - ord("a")) - (ord($key[$ki]) - ord("a"));

                    if ($x < 0) {
                        $x += 26;
                    }

                    $x = $x + ord("a");

                    $text[$i] = chr($x);
                }

                // mettre à jour l'index de la clé
                $ki++;
                if ($ki >= $kl) {
                    $ki = 0;
                }
            }
        }

        // retourner le code décripter
        return $text;
    }

}

?>


<?php
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TP2 EA et MJ</title>
    <link rel="stylesheet" type="text/css" href="TP_EA_MJ_CSS.css">
</head>
<body>
<br>

<br>

<form action="encode.php" method="post">
    <table cellpadding="5" align="center" cellpadding="2" border="7">
        <caption>
            <hr>
            <h1>Code vigenère</h1>
            <hr>
        </caption>

        <!--        Mettre la clé-->
        <tr>
            <td align="center">Clé: <input type="text" name="key" id="pass" value=""></td>
        </tr>
        <!--        Mettre le texte a encode-->
        <tr>
            <td align="center">Texte: <input type="textarea" id="box" name="code"></input></td>
        </tr>
        <!--        Bouton pour encode-->
        <tr>
            <td><input type="submit" name="encrypt" class="button" value="Encode" onclick="validate(1)"/></td>
        </tr>
        <!--        Bouton pour decode-->
        <tr>
            <td><input type="submit" name="decrypt" class="button" value="Decode" onclick="validate(2)"/></td>
        </tr>
        <!--        Endroit pour retourner le message encode-->
        <tr>
            <td>Message encode: </td>
        </tr>
        <!--        Endroit pour retourner le message decode-->
        <tr>
            <td>Message decode:  </td>
        </tr>

    </table>
</form>
</body>
</html>

14 réponses

Messages postés
27065
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2019
1937
Bonjour

Et quel est le souci exactement ?
Message d'erreur ou resultat incorrect? Merci de détailler...
jordane45
Messages postés
27065
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2019
1937 > jun_1393
Messages postés
19
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
12 décembre 2019

C'est donc que le chemin vers le fichier est incorrect ou qu'il y a un souci de droits.
jordane45
Messages postés
27065
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2019
1937 > jordane45
Messages postés
27065
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2019

tu peux essayer
$file_cle = file(__DIR__ . "/Clef/cle.txt", FILE_IGNORE_NEW_LINES);
$file_mondic = file(__DIR__ . "/Clef/mondic.txt", FILE_IGNORE_NEW_LINES);

Il faut bien que tes fichiers soient nommés correctement... Attentions aux majuscules/minuscules ( en général... il faut éviter d'utiliser des majuscules d'ailleurs... )
jun_1393
Messages postés
19
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
12 décembre 2019

sa doit être le chemin pour les droit je ne pense.
jun_1393
Messages postés
19
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
12 décembre 2019

Désolé d’avance si mes retours seront sporadiques, je commence ma journée scolaire.
jun_1393
Messages postés
19
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
12 décembre 2019

j'ai tester le code que tu as envoyer et je n'ai plus de warning quand je lance mon code.
merci pour la correction.
cependant la page reste toute blanche maintenant.
Messages postés
27065
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2019
1937
jun_1393
Messages postés
19
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
12 décembre 2019

ok, entre temps j'Ai résolu le problème de la page blanche, j'ai mis un require_once dans ma page index.
mon code me permet de crypter(function encoder) maintenant sans problème sauf que problème( toujours un truc qui va pas )
la function decoder affiche des sortes de caractère spéciaux.
jordane45
Messages postés
27065
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2019
1937 > jun_1393
Messages postés
19
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
12 décembre 2019

jun_1393
Messages postés
19
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
12 décembre 2019

j'ai lu la page la déclaration de ma page est dans les normes, j'ai pas de bd à utiliser, mon décode est normalement opérationnel. oups j'avais pas posté
sinon le problème des caractère spéciaux est terminer sa affiche maintenant un texte lisible. je vais continuer a réglé mes bugs
jun_1393
Messages postés
19
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
12 décembre 2019

je ne sais pas pourquoi mais ma fonction décode ne decode pas le texte entré mais decode le texte entré lui même sa fait un moment que je regarde et j'ai pas trouvé de solution.
jun_1393
Messages postés
19
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
12 décembre 2019

voici mon code actuel
ps: merci pour l'aide jusque ici jordane45

 
<?php

interface ICryptographie
{
    public function encoder($key, $text);

    public function decoder($key, $text);

    public function regexp($chaine);


}

class Crypto implements ICryptographie
{
    // fonction regexp pour geré les accents et caractére special
    function regexp($chaine) {
        $accents = Array("/é/", "/è/", "/ê/","/ë/", "/ç/", "/à/", "/â/","/á/","/ä/","/ã/","/å/", "/î/", "/ï/", "/í/", "/ì/", "/ù/", "/ô/", "/ò/", "/ó/", "/ö/");
        $sans = Array("e", "e", "e", "e", "c", "a", "a","a", "a","a", "a", "i", "i", "i", "i", "u", "o", "o", "o", "o");
        $chaine = preg_replace($accents, $sans,$chaine); $chaine = preg_replace('#[^A-Za-z0-9]#',' ',$chaine); return $chaine; }
      //  $toto='#£$¤µ*%§!:;,@}=])°^¨_\'|-[({\'#"~&<>² <föù>dré£%}';
       // echo teste($toto);//retourne » foudre

    // fonction pour encoder un texte
    function encoder($key, $text)
    {
       // $text = "";
        #longeur de la clé répété
        $keyLength=strlen($text);//text//
        ## !array qui repetera la clé  !!!!!!!!!!!!
        $repeatKey=strtolower(substr(str_repeat($key,$keyLength),0,$keyLength));
        $text_code = " ";

        $j=0;
        $text .= ' '; // au cas ou $text est vide

        for($i=0;$i<=$keyLength;$i++){

            if(ctype_alpha($text[$i])) {

                if (ctype_upper($text[$i])){
                    $text_code .= chr(((ord($repeatKey[$j]) -ord("a")  + ord($text[$i]) -ord("A")) % 26 ) + ord("A"));
                }
                else {
                    $text_code .= chr(((ord($repeatKey[$j]) -ord("a") + ord($text[$i]) -ord("a")) % 26 ) + ord("a"))  ;
                }
                $j++;
               // $this->regexp($text_code);

            } else if($text[$i] == ' ' ){
                $text_code .=' ';
            }

        }
        return  $this->regexp($text_code);
        //return $text_code;
    }

    function decoder($key, $text)
    {
        // change key to lowercase for simplicity
        $key = strtolower($key);

        // intialize variables
        $code = "";
        $ki = 0;
        $kl = strlen($key);
        $length = strlen($text);
        $text_decode =" ";

        // iterate over each line in text
        for ($i = 0; $i < $length; $i++)
        {
            // if the letter is alpha, decrypt it
            if (ctype_alpha($text[$i]))
            {
                // uppercase
                if (ctype_upper($text[$i]))
                {
                    $x = (ord($text[$i]) - ord("A")) - (ord($key[$ki]) - ord("a"));

                    if ($x < 0)
                    {
                        $x += 26;
                    }

                    $x = $x + ord("A");

                    $text[$i] = chr($x);
                }

                // lowercase
                else
                {
                    $x = (ord($text[$i]) - ord("a")) - (ord($key[$ki]) - ord("a"));

                    if ($x < 0)
                    {
                        $x += 26;
                    }

                    $x = $x + ord("a");

                    $text[$i] = chr($x);
                }

                // update the index of key
                $ki++;
                if ($ki >= $kl)
                {
                    $ki = 0;
                }
            }
        }

        // return the decrypted text
        return $text;

    }

}

?>


<?php
require_once('Crypto.php');
$crypto = new Crypto();
// initialise les variables
$key = "";
$code = "";
$error = "";
$valid = true;
$file_cle = file(__DIR__ . "/Clef/cle.txt", FILE_IGNORE_NEW_LINES);
$file_mondic = file(__DIR__ . "/Clef/mondic.txt", FILE_IGNORE_NEW_LINES);

// si le formulaire a été envoyé
if ($_SERVER['REQUEST_METHOD'] == "POST") {

// set les variables
    $key = $_POST['key'];
    $code = $_POST['code'];
foreach ($file_cle as $key){

// regarder si le clé a été mis
    if (empty($_POST['key'])) {
        $error = "Veuillez entrer une clé!";
        $valid = false;
    } // regarder si la clé a été envoyé
    else if (empty($_POST['code'])) {
        $error = "Veuillez entrer du texte à décoder";
        $valid = false;
    } // regarder si la clé est en alphanumeric
    else if (isset($_POST['key'])) {
        if (!ctype_alpha($_POST['key'])) {
            $error = "la clé ne doit que contenir des lettres";
            $valid = false;
        } // regarder si la clé est dans le dictionnaire *utiliser le fichier mondic.txt
    } else if ($key!==$file_mondic) {
		$error = "la clé ne se trouve pas dans le dictionnaire";
        $valid =false;
    }

        //regarder si la clé est dans le fichier cle.txt *utiliser le fichier cle.txt*
     else if ($key!==$file_cle){
	 $valid = false;
	 }

    }
}

// si le input est valide
        if ($valid) {
// si le bouton encode a été clicker
            if (isset($_POST['encrypt'])) {

                $code = $crypto->encoder($key, $code);
                //$error = "texte encodé!";

            }

// si le bouton décripter a été clicker
            if (isset($_POST['decrypt'])) {
                $code = $crypto->decoder($key, $code);
               // $error = "texte décodé!";

            }

}