Bonjour a tous,
pour un projet scolaire je fait un programme de chiffrement RSA.
Voila mon code , il est en Java's Cool (presque identique a Java , vous ne serez pas perdu)
2 Problèmes:
I. Chaine a transformer en ASCII
La fonction .hashCode() transforme pas en ascii , quel fonction doit-je utiliser ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 String codenucleaire = "isn"; // la chaine en ASCII ??? int codeAscii = codenucleaire.hashCode(); println("ASCII : " + codeAscii);
Si je me réfère a http://www.tableascii.com/ le mot isn devrait faire en décimal 105 (i) 115 (s) 110 (n)
II. Découpage de la chaine ASCII
Pour l'instant avec ma fausse chaine ASCII j’obtiens "104580"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 //FAIRE L'ENCRYPTAGE (Decouper la chaine en n-1 , ex: si n fait 3 caractere // decouper tout les 2 caractere XX XX XX XX , de ce cas n fait 3 caracteres. String s1 = codestring.substring(0, nstring.length()-1); println("Premiere paires: " + s1 ); String s2 = codestring.substring(nstring.length()-1, (nstring.length()-1)*2); println("Deuxieme paires: " + s2 ); String s3 = codestring.substring((nstring.length()-1)*2, (nstring.length()-1)*3); println("Deuxieme paires: " + s3 );
Mon "n" étant 141 le découpage se fait "n.length - 1" donc 2 par deux.
J'ai donc 3 partie decouper "10" , "45" et "80".
Comment faire cette partie de manière automatiser quelque soit le nombre de caractère de ma chaine ??
Pour que je puisse changer la chaine a encrypté a volonté .
Merci a tous pour vos aides , car j'en suis sur il y en aura !
Voila le code 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 void main(){ // Les variables int p = 3 ; //nombre premiers int q = 47 ; //nombre premiers int n = p*q ; int f = (p-1)*(q-1) ; int e = 79; //calculer avec Theoreme de Bezout int c = 0; int d = -1; while(c != 1) { d = d + 1 ; c = (e*d)%f; } // les 2 clés **println("La clé publique est (" + e +"," + n +")"); **println("La clé privée est (" + d +"," + n +")"); //la chaine en encrypter String codenucleaire = "isn"; // la chaine en ASCII ??? int codeAscii = codenucleaire.hashCode(); * println("ASCII : " + codeAscii); String codestring = String.valueOf(codeAscii); String nstring = String.valueOf(n); println("N : " + nstring); println("La chaine ASCII fait: " + codestring.length() + " caractères."); println("La chaine N fait: " + nstring.length() + " caractères."); //FAIRE L'ENCRYPTAGE (Decouper la chaine en n-1 , ex: si n fait 3 caractere // decouper tout les 2 caractere XX XX XX XX , de ce cas n fait 3 caracteres. String s1 = codestring.substring(0, nstring.length()-1); println("Premiere paires: " + s1 ); String s2 = codestring.substring(nstring.length()-1, (nstring.length()-1)*2); println("Deuxieme paires: " + s2 ); String s3 = codestring.substring((nstring.length()-1)*2, (nstring.length()-1)*3); println("Deuxieme paires: " + s3 ); int num1= Integer.parseInt(s1); int num2= Integer.parseInt(s2); int num3= Integer.parseInt(s3); //encrypter la partie decouper^e modulo n int num1mix = (int) (Math.pow(num1, e)%n); int num2mix = (int) (Math.pow(num2, e)%n); int num3mix = (int) (Math.pow(num3, e)%n); // la chaine encrypter System.out.println(num1mix + "" + num2mix + "" + num3mix); }
Partager