Chiffre de vigenère

Contenu du snippet

bonjours

je viens de faire un petit script cryptant un text en utilisant le chiffre de Vigenère.
pour ceux qui ne connaitraient pas, le chiffre de Vigenère est un systeme de chiffrement par substitution polyalphabétique, élaboré par Blaise de Vigenère ( reportez-vous a Wikipédia pour plus d'infos )
Il s'agissait a la base d'un simple travail sur les modulo, mais ayant obtenu qlq chose qui marche, je me suis dit que ça interesserait peut etre certains

ce script utilise donc ce principe de chiffrement
Durant le chiffrement, on obtien 3 chaines de caracteres:
- la clé de codage, qui est generée aleatoirement, et à la taille du text a chiffrer
- le tableau des caractères, qui contient les caractères, et qui est melangée aléatoirement
- le text codé

Durant le dechiffrement, il faut imperativement donner les 3 chaines completes et juste ( logique ). on recupere le texte décodé

l'utilisation de clés et tables de caracteres générées aleatoirement complique les choses, et empeche de retenire la clé par coeur, contrairement a la version de Vigenère, ou elles étaient préétablites

Source / Exemple :


<?

//fonction de chiffrement 

function chiffrage_de_Vigenère($text){

//caractères reconnus par le code
$caract = 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', 'Â', 'À', 'É', 'È', 'Ê', 'Ë', 'Ç', 'Î', 'Ï', 'Ù', 'Ô', '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', 'à', 'â', 'é', 'è', 'ê', 'ç', 'ï', 'î', 'û', 'ô', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ',', ' ', ';', ':', '?', '.', '!', '\'', '<', '>', '$', '£', '%', 'µ', '*', '+', '-');
//on melange les caractères
shuffle($caract);

//creation d'un tableau avec le text
$text_explode = preg_split('//', $text, -1, PREG_SPLIT_NO_EMPTY);

//creation de la clé de cryptage
$clé = array();
$nb_caracteres_clé = count($text_explode);
for($i=0; $i<=$nb_caracteres_clé; $i++) $clé[]= $caract[rand()%count($caract)];

//chiffrement du texte
$code = "";
for($i=0; $i<count($text_explode); $i++) $code = $code . $caract[(array_search($text_explode[$i], $caract)+array_search($clé[$i%count($clé)], $caract))%count($caract)];

//retour des données sous forme de tableau
$chiffrage = array( 'text' => $text, 'clé' => implode($clé), 'code' => $code, 'caract'=> implode($caract));
return $chiffrage;

}

//fonction de déchiffrement 

function dechiffrage_de_Vigenère($text, $clé, $caract){

//creation du tableau de caractères
$caract = preg_split('//', $caract, -1, PREG_SPLIT_NO_EMPTY);

//creation de la clé
$clé = preg_split('//', $clé, -1, PREG_SPLIT_NO_EMPTY);

//creation d'un tableau du text
$text_explode = preg_split('//', $text, -1, PREG_SPLIT_NO_EMPTY);

//dechiffrement du code
$code = "";
for($i=0; $i<count($text_explode); $i++){
$id_caract =  (array_search($text_explode[$i], $caract)-array_search($clé[$i%count($clé)], $caract))%count($caract);
$code = $code . $caract[(($id_caract < 0)?(count($caract)+$id_caract):$id_caract)];
}

//retour du text decodé
return $code;

}

//exemple 

$text = "Test de chiffrement d'un text par le chiffre de Vigenère";

$codage = chiffrage_de_Vigenère($text);

echo "Chiffrage d'un text : <br /><br /><br />

<strong>Text à chiffrer: </strong><br />
<textarea cols=\"100\" rows=\"5\">".$codage['text']."</textarea>
<br /><br />

<strong>Clé de codage: </strong><br />
<textarea cols=\"100\" rows=\"5\" readonly=\"readonly\">".$codage['clé']."</textarea><br /><br />
<strong>Code:</strong>;<br />
<textarea cols=\"100\" rows=\"5\" readonly=\"readonly\">".$codage['code']."</textarea><br /><br />

<strong>Tableau des caractères:</strong><br />
<textarea cols=\"100\" rows=\"5\" readonly=\"readonly\">".$codage['caract']."</textarea><br />
<br /><hr><br />";

$decodage = dechiffrage_de_Vigenère($codage['code'], $codage['clé'], $codage['caract']);

echo "Déchiffrage d'un text : <br /><br /><br />
<strong>Code:</strong>;<br />
<textarea cols=\"100\" rows=\"5\">".$codage['code']."</textarea><br /><br />
<strong>Clé de codage: </strong><br />
<textarea cols=\"100\" rows=\"5\">".$codage['clé']."</textarea><br /><br />
<strong>Tableau des caractères:</strong><br />
<textarea cols=\"100\" rows=\"5\">".$codage['caract']."</textarea><br /><br />

<strong>Texte déchiffrer: </strong><br />
<textarea cols=\"100\" rows=\"5\" readonly=\"readonly\">".$decodage."</textarea>";

?>

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.