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...
Et quel est le souci exactement ?
Message d'erreur ou resultat incorrect? Merci de détailler...
voici mon code actuel
ps: merci pour l'aide jusque ici jordane45
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é!";
}
}
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.
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... )