/** Methode de TranspositionInverse : Methode permettant de Transposer le Message lors du Dechiffrement * @param message : Le message à Transposer * @param cle : La clé de transposition à respecter lors de la transposition du message * * @return string */ public static string TranspositionInverse(string message, string cle) { // @see FillMatriceTransInverse() : Methode permettant de Remplir une matrice // lors de l'opération de Dechiffrement Matrice uneMatrice = FillMatriceTransInverse(message, cle); return(uneMatrice.ToString()); }
/** Methode FillMatriceTransInvers : Remplissage de la Matrice à partir du message * Methode Utilisé pour remplir le tableau lors du DECHIFFREMENT * @param message : Le message à remplir dans la Matrice * @param cle : la cle de Transposition, Utile pour determiner le nombre de colonne de la Matrice * * @return Matrice */ private static Matrice FillMatriceTransInverse(string message, string cle) { // Supprimer le '\0' accompagnant le message lors de l'encodage par l'espace vide string messageSansUnicode = message.Replace("\0", string.Empty); string[] cleSansEspace = cle.Split(' ');// on recupere la cle sans espace // longueur de la cle = nombre colonne de la Matrice int nbreColonne = cleSansEspace.Length; int sizeMessage = messageSansUnicode.Length; // il s'agit du nbLigne que notre Matrice de transposition comporte int nbreLigne = sizeMessage % nbreColonne == 0 ? (sizeMessage / nbreColonne) : ((sizeMessage / nbreColonne) + 1); Matrice uneMatrice = new Matrice(nbreLigne, nbreColonne); // Associer chaque colonne de la Matrice avec son numero de la clé SortedList listeTransposition = new SortedList(); // On remplit la Liste de correspondance de Colonne de la Matrice à la Clé de Transposition for (int i = 0; i < cleSansEspace.Length; i++) { listeTransposition.Add(int.Parse(cleSansEspace[i]), i); } // Constituer la Matrice avec le message à dechiffrer, tout en respectant l'ordre de la clé int curseur = 0; // Element courant sur le message for (int j = 0; j <= 9; j++) { if (listeTransposition[j] == null) { continue; } else { int positionDansCle = (int)listeTransposition[j]; // Position de la Colonne à remplir for (int k = 0; k < uneMatrice.RowSize; k++) { if (uneMatrice[k, positionDansCle] == null && curseur < sizeMessage) { uneMatrice[k, positionDansCle] = messageSansUnicode.Substring(curseur, 1); curseur++; } else if (uneMatrice[k, positionDansCle] == null && curseur >= sizeMessage) { uneMatrice[k, positionDansCle] = " "; } } } } return(uneMatrice); }
/**********************************************************************************************/ /************** TRANSPOSITION DES MESSAGES ***************/ /**********************************************************************************************/ /** Methode de Transposition : Methode permettant de Transposer le Message lors du Chiffrement * @param message : Le message à Transposer * @param cle : La clé de transposition à respecter lors de la transposition du message * * @return string */ public static string Transposition(string message, string cle) { // on remplit la Matrice des caractères constituant le message // @see FillMatrice() : permet de remplir le atrice lors du Chiffrement Matrice uneMatrice = FillMatrice(message, cle); string[] cleSansEspace = cle.Split(' '); string messageTranspose = ""; //varible qui capture le message qu'on transpose //on associe a chaque chiffre de la cle sa position dans la cle SortedList listeTransposition = new SortedList(); try { for (int i = 0; i < cleSansEspace.Length; i++) { listeTransposition.Add(int.Parse(cleSansEspace[i]), i); } } catch (Exception) { Console.WriteLine("1. Assurez-vous de ne pas avoir du blanc ' ' après avoir entrer la clé !\n" + "2. Veuillez entrer des chiffres !"); Environment.Exit(-1); } for (int j = 0; j <= 9; j++) { if (listeTransposition[j] == null) { continue; } else { int positionDansCle = (int)listeTransposition[j]; for (int k = 0; k < uneMatrice.RowSize; k++) { if (uneMatrice[k, positionDansCle] != null) { messageTranspose += uneMatrice[k, positionDansCle]; } } } } return(messageTranspose); }
/**********************************************************************************************/ /****************** REMPLISSAGE DE LA MATRICE ******************/ /**********************************************************************************************/ /** Methode FillMatrice : Remplissage de la Matrice à partir du message * Methode Utilisé pour remplir le tableau lors du CHIFFREMENT * @param message : Le message à remplir dans la Matrice * @param cle : la cle de Transposition, Utile pour determiner le nombre de colonne de la Matrice * * @return Matrice */ private static Matrice FillMatrice(string message, string cle) { // Supprimer le '\0' accompagnant le message lors de l'encodage par l'espace vide string messageSansUnicode = message.Replace("\0", string.Empty); string[] cleSansEspace = cle.Split(' ');// on recupere la cle sans espace // longueur de la cle = nombre colonne de la Matrice int nbreColonne = cleSansEspace.Length; int sizeMessage = messageSansUnicode.Length; //il s'agit du nbreLigne que notre Matrice de transposition comporte int nbreLigne = sizeMessage % nbreColonne == 0 ? (sizeMessage / nbreColonne) : ((sizeMessage / nbreColonne) + 1); Matrice uneMatrice = new Matrice(nbreLigne, nbreColonne); // Remplissage de la Matrice int curseur = 0; // curseur de deplacement dans la matrice qui designe le caractere courant for (int i = 0; i < nbreLigne; i++) { for (int j = 0; j < nbreColonne; j++) { if (curseur <= (nbreLigne * nbreColonne)) { if (curseur >= messageSansUnicode.Length) { uneMatrice[i, j] = " "; } else { uneMatrice[i, j] = messageSansUnicode.ToCharArray()[curseur].ToString(); } } curseur++; } } return(uneMatrice); }