Vigenere

Résolu/Fermé
jun_1393 Messages postés 28 Date d'inscription jeudi 26 septembre 2019 Statut Membre Dernière intervention 2 juin 2020 - 13 nov. 2019 à 03:20
jun_1393 Messages postés 28 Date d'inscription jeudi 26 septembre 2019 Statut Membre Dernière intervention 2 juin 2020 - 13 nov. 2019 à 22:48
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>

2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
13 nov. 2019 à 06:34
Bonjour

Et quel est le souci exactement ?
Message d'erreur ou resultat incorrect? Merci de détailler...
1
jun_1393 Messages postés 28 Date d'inscription jeudi 26 septembre 2019 Statut Membre Dernière intervention 2 juin 2020
13 nov. 2019 à 07:30
mon problème actuel est le message suivant qui apparaît quand je veux tester mon code.

file(/Clef/mondic.txt): failed to open stream: No such file or directory in F:\progweb\laragon\www\TP2PHP\Encode.php on line 10

Invalid argument supplied for foreach() in F:\progweb\laragon\www\EXPHP\Encode.php on line 18.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > jun_1393 Messages postés 28 Date d'inscription jeudi 26 septembre 2019 Statut Membre Dernière intervention 2 juin 2020
13 nov. 2019 à 09:20
C'est donc que le chemin vers le fichier est incorrect ou qu'il y a un souci de droits.
0
jun_1393 Messages postés 28 Date d'inscription jeudi 26 septembre 2019 Statut Membre Dernière intervention 2 juin 2020
13 nov. 2019 à 13:26
sa doit être le chemin pour les droit je ne pense.
0
jun_1393 Messages postés 28 Date d'inscription jeudi 26 septembre 2019 Statut Membre Dernière intervention 2 juin 2020
13 nov. 2019 à 13:51
Désolé d’avance si mes retours seront sporadiques, je commence ma journée scolaire.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
13 nov. 2019 à 14:37
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... )
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
13 nov. 2019 à 19:08
0
jun_1393 Messages postés 28 Date d'inscription jeudi 26 septembre 2019 Statut Membre Dernière intervention 2 juin 2020
13 nov. 2019 à 19:59
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.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > jun_1393 Messages postés 28 Date d'inscription jeudi 26 septembre 2019 Statut Membre Dernière intervention 2 juin 2020
13 nov. 2019 à 20:04
0
jun_1393 Messages postés 28 Date d'inscription jeudi 26 septembre 2019 Statut Membre Dernière intervention 2 juin 2020
13 nov. 2019 à 20:30
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
0
jun_1393 Messages postés 28 Date d'inscription jeudi 26 septembre 2019 Statut Membre Dernière intervention 2 juin 2020
13 nov. 2019 à 22:38
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.
0
jun_1393 Messages postés 28 Date d'inscription jeudi 26 septembre 2019 Statut Membre Dernière intervention 2 juin 2020
13 nov. 2019 à 22:48
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é!";

            }

}
0