Vigenere
Résolu
jun_1393
Messages postés
32
Statut
Membre
-
jun_1393 Messages postés 32 Statut Membre -
jun_1393 Messages postés 32 Statut Membre -
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.
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
-
Bonjour
Et quel est le souci exactement ?
Message d'erreur ou resultat incorrect? Merci de détailler...
-
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. -
-
-
-
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... )
-
-
-
-
-
-
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é!"; } }
-