Bonjour a tous,

Je suis actuellement en terminale et j'ai comme épreuve au BAC l'épreuve d' ISN (informatique et sciences du numérique).

J'ai choisi comme projet final la cryptographie en java en utilisant une fonction affine (pour l'instant je n'utilise que les majuscules)

Donc j'ai réussi a écrire la première partie de l’algorithme qui permet de coder, en utilisant le code ascii de chaque lettre. Donc je rentre mon a et mon b pour pouvoir faire y=ax + b (y est le code ascii codé et x le code ascii non changé)

Voila la formule que j'utilise : MessageCode = MessageCode + (char)((((a * MessageInter[i]) -65 + b) %26) +65);

MessageCode étant le message codé, et MessageInter[i] le code ascii de ma lettre, et que je prend dans un tableau au préalable défini .

Ensuite le messagecode est de nouveau transformé en lettre et mon message est codé : tout cela marche

Mon problème est pour le décodage. Utilisant un modulo, je ne peux pas faire l'inverse du modulo donc j'ai décider d'utiliser un tableau a double dimension: dans la première ligne, le code ascii de mes lettres non codées et dans la seconde mes lettres codées.

Mais je n'arrive pas a faire en sorte que, lorsque je rentre une lettre, il décode le code ASCII, "remonte d'une ligne" pour trouver le code ascii correspondant non coder et ensuite le retransformer en lettre.

Donc en résumé ça ferait: Je rentre une lettre ---- il trouve son code ascci --- il remonte d'une ligne --- trouve son code ascii non codé --- transforme en lettre

Voila l'algorithme entier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
void main() {
 
   clear();
 
   int MessageInter [];
 
   MessageInter = new int [100];
 
   //Taille limitée à 100 pour le message à crypter
 
    int i,c,a,b;
 
   c = readInt("Tapez:  1 pour Cryptage | 2 pour Décryptage");
 
   a = readInt("quelle valeur de a voulez vous prendre?");
 
   b = readInt("quelle valeur de b voulez vous prendre");
 
   char alphabet_code [] [];
 
   //déclaration du tableau 
 
    alphabet_code = new char [2] [100];
 
   // deux colones 100 ligne 
 
    if (c ==1) {
 
      String MessageClair;
 
      // Déclaration des variables
 
       String MessageCode = "";
 
      //vaut 0 
 
       println("Texte à crypter ?");
 
      // Demande du message e
 
       MessageClair = readString();
 
      // demande le message a coder
 
       println("Le message à crypter est" + "\n" + MessageClair);
 
      // On sépare chaque caractère du message et on met son code ascii décalé de 65 dans le tableau
 
       for (i =0; i <= MessageClair.length() -1; i ++) {
 
         //message en lettre transformé en chiffre
 
          MessageInter[i] = (int)(MessageClair.charAt(i));
 
      }
 
      for (i =0; i <= MessageClair.length() -1; i ++) {
 
         MessageCode = MessageCode + (char)((((a * MessageInter[i]) -65 + b) %26) +65);
 
         //prend la première lettre transformée
 
          //de chiffre fais - 65 
 
          //(pour mettre a=0) puis clef donne le décalage , 
 
          //modulo 26 pour etre compris dans l'alfabet + 65 pour repasser en ascii 
 
       }
 
      // Affichage du résultat.
 
       println("Le cryptogramme est" + "\n" + MessageCode);
 
   }
 
   if (c ==2) {
 
      for (int k =0; k <=1; k ++) {
 
         if (k ==0) {
 
            for (int j =0; j <=25; j ++) {
 
               alphabet_code[k] [j] = (char)(j +65);
 
               // remplissage de la première colone avec les majuscules 
 
             }
 
         } else {
 
            for (int j =0; j <=25; j ++) {
 
               alphabet_code[k] [j] = (char)((a * j + b) %26 +65);
 
               // remplissage deuxième colonne avec les majuscules codées
 
                System.out.println(alphabet_code [k] [j]);
 
               //affiche le tableau 
 
             }
 
         }
 
      }
 
   }
 
   String Message;
 
   println("Texte à décrypter ?");
 
   Message = readString();
 
}
 
//message inter message mis en chiffre millieu 
 
//message clair message qu'on veur coder depart 
 
//message code: finalité fin
Pouvez vous m'aider a le terminer svp ? Si vous voulez que je vous envoie le .jvs par mail, dites le moi.

Merci de votre aide

Florian

PS: désolé si le message n'est pas posté au bon endroit ..