Chiffre de Hill (2 x 2)

Alphabet utilisé

\(\(alphabet = {"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"};\)\)

Matrices de chiffrement et de déchiffrement

matc=(({{9, 4}, {5, 7}}));matd=(({{5, 12}, {15, 25}}));

Texte à chiffrer

texte = "je vous aime";

Ecrire le texte sous forme d'une liste de rang

Le module ci-dessous convertit les lettres en majuscules et élimine tous les autres caractères. Le résultats et une liste de codes ASCII, donc de nombres compris entre 65 et 90.

Standardiser[
          texte_] := 
Module[{maj, 
            continu}, 
maj = 
            ToUpperCase[
              StringJoin[
                Characters[
                    ToLowerCase[
                      ToString[
                        texte]]] /. {"é" -> "e", "\
è" -> "e", "ê" -> "e", "ë\
" -> "e", "à" -> "a", "â" -> "\
a", "î" -> "i", "ï" -> "i", "\
ö" -> "o", "ô" -> "o", "\
ü" -> "u", "û" -> "u", "\
ç" -> "c"}]]; 
continu = 
            Select[ToCharacterCode[
                maj], (# < 91 && # > 
                      64) &]
];

ascii = Standardiser[texte]

On ajoute un "X" si le nombre de lettres est impair (utilisez les fonctions If, Length, Mod et Join).

Ecrivez votre instruction ici

ascii = Mod[ascii - 64, 26]

Chiffrement proprement dit

On regroupe les rangs par deux.

ascii = Partition[ascii, 2]

nbrVect = Length[ascii]

Il faut maintenant multiplier (modulo 26) chacun des vecteurs de la liste par la matrice de chiffrement matc. Le résulat sera une liste (nommée res) de vecteurs chiffrés. Utilisez les fonctions For, Append, Mod et Dot.

Ecrivez votre instruction ici

res

res = Flatten[res]

Il ne reste plus qu'à convertir en lettres... Utilisez la liste alphabet (voir haut de la page).

Ecrivez votre instruction ici

Création d'un module

Regroupez toutes les instructions ci-dessus dans un module Hill. Ce module servira à la fois à chiffrer et à déchiffrer.

Hill[matrice_, texte_]:=
Ecrivez votre module ici
];

code = Hill[matc, texte]

clair = Hill[matd, code]