Sprawdź się
Znasz już oryginalną wersję szyfru Vigenère'a – dotyczy ona określonych zasad przy tworzeniu klucza szyfrującego. Na podstawie przedstawionego kodu napisz funkcję, która przyjmie jeden parametr – łańcuch znaków do zaszyfrowania, a następnie utworzy odpowiedni klucz (pierwszy znak klucza ma być równy „J”) i go zwróci. Przetestuj działanie programu dla łańcucha znaków do zaszyfrowania tajnytekst.
Specyfikacja problemu:
Dane:
doZaszyfrowania – łańcuch znaków
Wynik:
klucz – łańcuch znaków
Przykładowe rozwiązanie zadania:
public class OrygianlnySzyfrVigenere {
static String utworzKlucz(String doZaszyfrowania) {
String klucz = "";
klucz += "j";
for (int i = 0; i < doZaszyfrowania.length() - 1; i++) {
klucz += doZaszyfrowania.charAt(i);
}
return klucz;
}
public static void main(String[] args) {
System.out.println(utworzKlucz("tajnytekst"));
}
}
W tym zadaniu musimy rozszerzyć program z Ćwiczenia 1 o generowanie tablicy szyfrującej oraz wykonanie szyfrowania. Klucz ma być tworzony tak, jak w poprzednim zadaniu (według oryginalnej wersji szyfru Vigenère'a).
Specyfikacja problemu:
Dane:
doZaszyfrowania – łańcuch znaków
klucz – łańcuch znaków
Wynik:
Program wyświetla utworzoną tablicę szyfrującą, a w nowej linii wynik szyfrowania.
Przykładowe rozwiązanie zadania:
public class OrygianlnySzyfrVigenere {
static char[] alfabetLacinski = new char[26];
static char[][] tabela = new char[26][26];
static void wypelnienieTablicy() {
for(int i = 97, z = 0; i < 123; i++, z++) {
alfabetLacinski[z] = (char) i;
}
for(int j = 0; j < 26; j++) {
for(int k = 0; k < 26; k++) {
tabela[j][k] = alfabetLacinski[k];
}
for(int l = 0; l < 26 - 1; l++) {
char temp = alfabetLacinski[l];
alfabetLacinski[l] = alfabetLacinski[l + 1];
alfabetLacinski[l + 1] = temp;
}
}
for(int m = 0; m < 26; m++) {
for(int n = 0; n < 26; n++) {
System.out.print(tabela[m][n]);
}
System.out.println();
}
}
static String utworzKlucz(String doZaszyfrowania) {
String klucz = "";
klucz += "j";
for(int i = 0; i < doZaszyfrowania.length() - 1; i++) {
klucz += doZaszyfrowania.charAt(i);
}
return klucz;
}
static String zaszyfruj(String doZaszyfrowania) {
String wynikSzyfrowania = "";
String klucz = utworzKlucz(doZaszyfrowania);
for (int i = 0, j = 0; i < doZaszyfrowania.length(); i++) {
wynikSzyfrowania += tabela[(int)(doZaszyfrowania.charAt(i)-97)][(int)(klucz.charAt(j)-97)];
if (j == klucz.length() - 1) {
j = 0;
} else {
j++;
}
}
return wynikSzyfrowania;
}
public static void main(String[] args) {
wypelnienieTablicy();
System.out.println(zaszyfruj("tajnytekst"));
}
}