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

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);
La fonction .hashCode() transforme pas en ascii , quel fonction doit-je utiliser ??
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
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 );
Pour l'instant avec ma fausse chaine ASCII j’obtiens "104580"
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);
}