Je cherche à coder (en C++) une fonction qui chiffre suivant le chiffre de Delastelle (le déchiffrement n'est pas encore implémenté). J'ai auparavant codé une fonction qui chiffre et déchiffre un texte en utilisant le carré de Polybe (qui marche). La fonction fonctionne mais pour tester si le message chiffré est bien le bon, j'ai utilisé deux scripts JavaScript en tant que "référence":
En voilà un;
Et voilà l'autre.
Tout d'abord, ces scripts ne font pas exactement la même chose: le premier le J par le I (donc version anglaise) et le second remplace le W par le V (donc version française). Heureusement, mon algo est souple et il prend en paramètre:
- Une référence vers le texte à coder
- Une référence vers le texte codé
- La grille de codage (ou le mot clé qui la définit, car mon algo sait générer une grille à partir d'un mot-clé)
- La longueur des séries (conventionnellement 5)
- Le caractère à remplacer (W ou J par exemple)
- Le caractère de remplacement (V ou I par exemple)
Mais les résultats obtenus ne sont pas les mêmes avec les scripts JavaScript et mon algo.
Le code de l'algo (j'ai mis des "cout" un peu partout pour rechercher mes erreurs):
if(longueurDeSeries)//Petite vérification... {
string grilleTraite = ""; bool alphabet[26] = {false};// Cette lettre fait-elle déjà partie de la grille ? char remplacement[] = { caractereDeRemplacement, '\0'};
//Remplacement du caractèreASupprimer dans la grille while(grille.find(caractereASupprimer, 0)!=string::npos)// Tant qu'il y a un mauvais caractère dans le texte
grille.replace(grille.find(caractereASupprimer, 0), 1, remplacement);//On le remplace
//Remplacement du caractèreASupprimer dans le texteAcoder while(texteAcoder.find(caractereASupprimer, 0)!=string::npos)// Tant qu'il y a un mauvais caractère dans le texte
texteAcoder.replace(texteAcoder.find(caractereASupprimer, 0), 1, remplacement);//On le remplace
//Codage
string ligne, colone; int caracteresIgnores = 0; //Pour ignorer les caractères spéciaux (espaces...) //Première phase du codage: polybe réorganisé cout << "Premiere phase du codage:"<< endl; //Avant la boucle, on rajoute des nulles pour que la longueur du message soit //un multiple de longueurDeSeries for(; texteAcoder.size()%longueurDeSeries;)
texteAcoder += 'x'; cout << "Nulles: "<< texteAcoder << endl;
//Colone if((grille.find(tolower(texteAcoder[i]),0)+1)%5!=0)
colone += '0' + (grilleTraite.find(tolower(texteAcoder[i]),0)+1)%5; else
colone += '5'; cout << "colone: " << colone << endl; } else{//Ce caractère a été ignoré
caracteresIgnores++; } }//Fin de la boucle
//Comme on a jouté des nulles au texte codé, on peut concaténer les buffers sans se poser de question //car il y a forcément cinq caractères dans chaqun des buffers
texteCode += ligne;
texteCode += colone;
polybe(texteAcoder, texteCode, grilleTraite, true); //Le dernier booléen signifie que la fonction va déchiffrer et pas chiffrer //Même si la fonction fonctionne en mode de déchiffrement, le "texte d'entrée" (donc ici le texte à déchiffrer) //est stocké dans l'argument texteAcoder (et donc le résultat, le texte déchiffré est stocké dans texteCode)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.