Ciao a tutti,
sono nuovo nel forum, e vorrei esporvi il mio problema.
Ho realizzato un algoritmo di cifratura/decifratura di dati RSA.
Il mio problema sorge quando una volta codificato il messaggio devo andarlo a decodificare, dato che inserendo in input il mio messaggio da decodificare non viene compreso.
Ora mi spiego meglio.
Dato che nella codifica usiamo le operazioni in modulo, e lavorando con la chiave pubblica (n,e)=(221,31) , immettendo in input mediante l'uso dello scanner java, la stringa "love", compio i seguenti passi.
Dalla tabella ASCII sappiamo che ogni carattere è espresso come valore numerico che può rappresentarsi decimale, in questo caso l=108 o=111 v=118 e=101.
il codice che uso per conoscere il valore numerico del carattere è il seguente:
codice:
System.out.println("Inserisci stringa");
Scanner in=new Scanner(System.in);
String s=in.next();
for(int i=0 ; i<s.length();i++)
{
// Aggiungo i vari caratteri della strina in un ArrayList chiamato carattere
int x=s.CharAt(i);
carattere.add(x);
}
se vado a stampare l'ArrayList ottengo:
codice:
for(int i=0;i<carattere.size();i++)
{
System.out.println("Il carattere"+i+"-esimo della stringa è:"+carattere.get(i));
}
ed ottengo in output: 108,111,118,101. correttamente come deve essere.
Adesso effettuata la codifica del messaggio, ottengo nuovamente correttamente i valori codificati: 173,19,118,101 , e dato il problema col carattere 19 che è di controllo ho deciso di aggiungere quando visualizzo 33 così da rientrare nei caratteri rappresentabili.
Inoltre i caratteri 173,19,118,101 sono in un ArrayList chiamato codificato, quindi stampo:
codice:
System.out.println("Il messaggio codificato è:");
for(int i=0;i<codificato.size();i++)
{
System.out.print((char) (codificato.get(i)+33));
}
quindi effettivamente a video ho i caratteri rappresentati dai valori: 206,52,151,134.
Il mio problema sorge nella decodifica, ovvero quando immetto utilizzando lo scanner java, il mio messaggio da decodificare non viene capito il messaggio.
Vi faccio l'esempio con la sola prima lettera della stringa, ovvero Î=206, scrivendo il codice:
codice:
System.out.println("Inserisci stringa");
Scanner in=new Scanner(System.in);
String s=in.next();
int x=s.CharAt(0);
System.out.println("Valore del carattere:"+(int) x);
ed ottengo in output il valore 65533, mentre dovrebbe essere 206, e questo problema sorge con tutti i caratteri con valore >127 nella tabella ASCII.
Scusatemi se ho scritto un papiro, spero di essere stato esaustivo.
Sono giorni che 
sul problema senza riuscire a risolverlo.
Grazie a tutti per l'aiuto!!