Buongiorno,
sto affrontando un'esercitazione di Java nella quale devo riprodurre un sistema crittografico polialfabetico. Il funzionamento e il testo è il seguente: supponiamo che il testo in chiaro sia composto dalle 26 lettere maiuscole dell'alfabeto dalla A alla Z. La chiave è composta da un numero K di lettere che si ripetono nella stessa chiave per tutta la lunghezza del codice in chiaro. Ad ogni lettera nella chiave corrisponde un alfabeto che parte dalla lettera stessa e scorre l'alfabeto “all'indietro”.
Esempio K=3, chiave formata dalle lettere Z, N e J
Alfabeto in chiaro: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Alfabeto 'Z': Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
Alfabeto 'N': N M L K J I H G F E D C B A Z Y X W V U T S R Q P O
Alfabeto 'J': J I H G F E D C BA Z Y X W V U T S R Q P O N M L K
chiave: Z N J Z N J Z
testo in chiaro: L I N C O N S
testo cifrato: O F W X Z W H
Scrivere un programma che legga in input il testo da cifrare, il numero K e le tre lettere che
compongono la chiave. Implementare l'algoritmo di codifica, stampare in uscita il testo da cifrare ed il testo cifrato.
Ho iniziato la scrittura del programma, ma mi sono bloccato, non riesco a capire come posso legare la frase data in input con la chiave e con l'alfabeto! Ho pensato di farlo con le posizioni: ovvero alla lettera in posizione x del testo in chiaro corrisponde una lettera in posizione x della chiave, che mi da l'alfabeto da usare e poi alla lettera in posizione x dell'alfabeto in chiaro corrisponde la lettera in posizione x dell'alfabeto codificato. Il mio problema è come scrivere la stringa chiave, infatti io l'ho inizializzata vuota e in un ciclo for la riempio con le lettere date dall'utente, il fatto è che quindi ho una stringa formata da "Z N J", come faccio a renderla ZNJZNJZ (ho ripreso l'esempio sopra riportato) cioè fare in modo di ripetere i caratteri che ho per farlo diventare uguale alla parola che ho in input dall'utente? Non ci arrivo proprio. Allego parte del programma che ho compilato potrebbe essere d'aiuto.
String alfabetoinChiaro = "A"+"B"+"C"+"D"+"E"+"F"+"G"+"H"+"I"+"J"+"K"+"L"+"M"+"N"+"O"+"P"+"Q"+"R"+"S"+"T"+"U"+"V"+"W"+"X"+"Y"+"Z" ;
intK= inDati.getInteger("Dammi la dimensione della chiave");
String[] alfabeti = new String[K];
String chiave= "";
for (int i=0; i<K;i++){
String lettera = inDati.getString("Inserisci la lettera"+ i+1 + "-esima che forma la chiave");
chiave = chiave + lettera;
intposizione = alfabetoinChiaro.indexOf(lettera.charAt(0));
intposizione2 = alfabetoinChiaro.indexOf("A");
String alfabetoTagliato1 = alfabetoinChiaro.substring(posizione+1); //.substring (int) taglio dalla posizione indicata fino alla fine della stringa
String alfabetoTagliato2 = alfabetoinChiaro.substring(posizione2, posizione+1); //.substring (int begin , int end): int begin è il punto di partenza, incluso; int end punto di arrivo escluso
//uDati.printLine(alfabetoTagliato1);
//uDati.printLine(alfabetoTagliato2);
String alfabetoTagliato_reverse = new StringBuffer(alfabetoTagliato1).reverse().toString();
String alfabetoTagliato2_reverse = new StringBuffer(alfabetoTagliato2).reverse().toString();
//uDati.printLine(alfabetoTagliato_reverse);
//uDati.printLine(alfabetoTagliato2_reverse);
String alfabetoCodificato = alfabetoTagliato2_reverse + alfabetoTagliato_reverse;
//uDati.printLine(alfabetoCodificato);
String testoinChiaro = inDati.getString("Inserisci il testo da cifrare");
for (int j=0; j<testoinChiaro.length(); j++){
E qui mi sono bloccato! Spero mi possiate aiutare.
Grazie per l'attenzione