W zadaniu rozważamy teksty zbudowane tylko z wielkich liter alfabetu angielskiego, znaków odstępu i znaków przestankowych (przecinek, kropka). Oto litery alfabetu i numery ich pozy- cji w alfabecie:
A=0,B=1,C=2...Z=25
Szyfrowanie Vigenère’a polega na zastąpieniu każdej litery tekstu źródłowego literą odległą od niej cyklicznie w alfabecie o k pozycji.
Wartość k nie jest z góry ustalona dla całego tekstu źródłowego, lecz dla każdej litery w tekście jest określana osobno, w oparciu o słowo przyjęte jako klucz szyfrowania.
Przystępując do szyfrowania, należy przyporządkować kolejnym literom tekstu źródłowego kolejne litery klucza, chodząc po nim cyklicznie, jeśli jest krótszy od szyfrowanego tekstu. Znaki inne niż litery nie są szyfrowane, pomijamy je podczas przypisywania liter klucza. Po- zycja litery klucza w alfabecie jest tą wartością k, o jaką należy wykonać przesunięcie względem litery tekstu źródłowego w celu znalezienia odpowiadającej jej litery szyfru.
Przykład
tekst źródłowy: ”JEST OK”, klucz: ”EWA”
wynik szyfrowania: ”NASX KK”.
W pliku dokad.txt znajduje się jeden wiersz z tekstem. Długość tekstu nie przekracza 1024 znaków. Należy zaszyfrować ten tekst metodą Vigenère’a, używając jako klucza słowa: ”LUBIMYCZYTAC”.
a) Podaj liczbę powtórzeń klucza niezbędną do zaszyfrowania całego tekstu źródłowego (uwzględniając w nich ostatnie rozpoczęte powtórzenie).
b) Podaj zaszyfrowany tekst i zapisz go w pliku z odpowiedziami
na początku chciałem zaszyfrować tekst źródłowy przykładowy :"JEST OK" ,klucz"EWA",niestety,ale źle szyfruje,nie wiem gdzie mogłem popełnić błąd
oto kod :
#include <iostream>
#include <fstream>
using namespace std;
char znak[12]={'L','U','B','I','M','Y','C','Z','Y','T','A','C'};
char znak1[3]={'E','W','A'};
string szyfr(string s)
{
for(int i=0;i<s.size();i++)
{
if(s[i]>='A' && s[i]<='Z')
{
int c=s[i]-'A';
c=s[i]+(znak1[(i%3)]-'A');
c%=26;
s[i]=c+'A';
}
}
return s;
}
int main()
{
/*
string s;
ifstream we("zz.txt");
while(getline(we,s)!=NULL)
{
}
cout<<s;
cout<<"-------------------------------------------------------------"<<endl;
*/
cout<<szyfr("JEST OK");
return 0;
}