Salve a tutti.
Sto cercando di implementare il cifrario a trasposizione con questa GUI

Per la cifratura tutto ok.. per la decifratura ho qualche problema nella costruzione della matrice da leggere poi nell'ordine in base alla chiave...
Ad esempio, per il messaggio INVIORINFORZIDOMANI! la cifratura è IOFIANRODNVIROIINZM!
seguendo il metodo che ho scritto:
(sto facendo l'esempio con esattamente 20 caratteri e chiave 4 (quindi 4 colonne della matrice) per evitare di dover lavorare con gli spazi vuoti.. la cifratura funziona già in qualsiasi caso, la decifratura no.. quindi l'esempio è per messaggio.lenght() = 20 e matrice 5x4)
CIFRATURA
codice:
public String cifra(int key, String messaggio) {
int c = key;
String output = "";
messaggio = messaggio.replaceAll("\\s", "");
int r = messaggio.length()/c;
if (messaggio.length()%c != 0){
r++;
}
int pos = 0;
char[][] M = new char [r][c];
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
if (pos == messaggio.length())
break;
M[i][j] = messaggio.charAt(pos);
pos++;
}
}
for (int i = 0; i < c; i++) {
for (int j = 0; j < r; j++) {
output += M[j][i];
}
}
return output;
}
LA DECIFRATURA
codice:
public String decifra(int key, String messaggio) {
messaggio = messaggio.replaceAll("\\s", "");
boolean f = false;
int c = key, j, i;
String output = "";
char[][] M;
int pos = messaggio.length();
int r = messaggio.length()/c;
int lastr = messaggio.length()%c;
M = new char [r][c];
for (i = r-1; i >= 0; i--) {
for (j = c-1; j >= 0; j--) {
System.out.println("POS: "+pos);
M[i][j] = messaggio.charAt(pos);
pos--;
}
}
for (i = 0; i < c; i++) {
for (j = 0; j < r; j++) {
output += M[j][i];
}
}
return output;
}
con errore sulla riga che ho sottolineato:

SPERO DI NON AVER INFRANTO REGOLE DEL FORUM! GRAZIE IN ANTICIPO