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:
#include <iostream>
using namespace std;
string utworzKlucz(string doZaszyfrowania) {
string klucz = "";
klucz += 'j';
for (int i = 0; i < doZaszyfrowania.length() - 1; i++) {
klucz += doZaszyfrowania[i];
}
return klucz;
}
int main() {
cout << utworzKlucz("tajnytekst");
return 0;
}
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ówklucz
– łańcuch znaków
Wynik:
Program wyświetla utworzoną tablicę szyfrującą, a w nowej linii wynik szyfrowania.
Przykładowe rozwiązanie zadania:
#include <iostream>
using namespace std;
char alfabet[26];
char tabela[26][26];
void wypelnijTablice() {
int z = 0;
for (int i = 97; i < 123; i++) {
alfabet[z] = (char)i;
z++;
}
for (int j = 0; j < 26; j++) {
for (int k = 0; k < 26; k++) {
tabela[j][k] = alfabet[k];
}
for (int l = 0; l < 26 - 1; l++) {
char temp = alfabet[l];
alfabet[l] = alfabet[l + 1];
alfabet[l + 1] = temp;
}
}
for (int m = 0; m < 26; m++) {
for (int n = 0; n < 26; n++) {
cout << tabela[m][n];
}
cout << endl;
}
}
string utworzKlucz(string doZaszyfrowania) {
string klucz = "";
klucz += 'j';
for (int i = 0; i < doZaszyfrowania.length() - 1; i++) {
klucz += doZaszyfrowania[i];
}
return klucz;
}
string szyfruj(string doZaszyfrowania) {
string zaszyfrowane = "";
string klucz = utworzKlucz(doZaszyfrowania);
for (int i = 0, j = 0; i < doZaszyfrowania.size(); i++) {
zaszyfrowane += tabela[(int)(doZaszyfrowania[i] - 97)][(int)(klucz[j] - 97)];
if (j == klucz.size() - 1) {
j = 0;
}
else {
j++;
}
}
return zaszyfrowane;
}
int main() {
wypelnijTablice();
cout << szyfruj("tajnytekst");
return 0;
}