W szyfrze kolumnowym jako klucza używa się permutacji pewnego n elementowego zbioru postaci {1,2,...,n}.
Istnieje wiele metod wygenerowania dowolnej permutacji takiego zbioru. Można posłużyć się tutaj zarówno liczbami pseudolosowymi, jak równiez z góry ustaloną funkcją o nieznanych parametrach czy współczynnikach. W poniższym przykładzie użyta jest funkcja f(n)=an2+b, gdzie a i b są liczbami naturalnymi.
DANE:
n - ilość elementów zbioru
a, b - współczynniki funkcji
WYNIK:
tablica t[1..n] zawierająca permutację zbioru {1,2,...,n}
ALGORYTM:
1. k:=n
2. Wpisz do tablicy t do kolejnych komórek liczby od 1 do k.
3. Dopóki k>1 wykonuj:
a.) wyznacz komórkę tablicy: i:=1+(f(k) mod k)
b.) zamień w tablicy t miejscami liczby na pozycjach i i k
c.) zmniejsz o jeden k
W celu zaszyfrowania tekstu jawnego wpisujemy go do tablicy w kolejne kolumny a następnie odczytujemy wierszami zgodnie z permutacją wszystkich wierszy wyznaczoną przez funkcję f. Dla uproszczenia przyjmiemy, że tablica szyfrująca składa się z 5 wierszy i 5 kolumn. Dodatkowo przyjmiemy, że jeśli tekst jawny ma długość krótszą niż 25 znaków, to uzupełniamy go znakiem *.
a=1
b=10
Tekst jawny=INFORMACJA
Tablica:
-------
I M * * *
N A * * *
F C * * *
O J * * *
R A * * *
-------
Permutacja:
t = {1, 2, 3, 4, 5}
f(5)=1+(5^2+10) mod 5=1 --> 5 2 3 4 1 - wymiana t[1] z t[5]
f(4)=1+(4^2+10) mod 4=3 --> 5 2 4 3 1 - wymiana t[3] z t[4]
f(3)=1+(3^2+10) mod 3=2 --> 5 4 2 3 1 - wymiana t[2] z t[3]
f(2)=1+(2^2+10) mod 2=1 --> 4 5 2 3 1 - wymiana t[1] z t[2]
f(1)=1+(1^2+10) mod 1=1 --> 4 5 2 3 1 - wymiana t[1] z t[1]
Wypisujemy kolejno wiersze czwarty, piąty, drugi trzeci i pierwszy:
Kryptogram=OJ***RA***NA***FC***IM***
Napisz program, który odszyfruje podany kryptogram zaszyfrowany szyfrem kolumnowym używając tabelki o wymiarach 5 wierszy i 5 kolumn.
Pierwszy wiersz wejścia zawiera liczby całkowite a i
b z zakresu 1..10.
W wierszu drugim zapisano niepusty tekst o maksymalnej długości 25 znaków.
Kryptogram podanego tekstu.
Dla danych podanych na wejściu:
9 6 R****A****T****T****D****
Poprawną odpowiedzią jest wyjście:
TDTAR
Jeśli chcesz zobaczyć inny przykład odśwież tę stronę klawiszem F5
Opcje zadania:
Biblioteki : iostream iomanip cmath string Limit czasu : 0.1 s Limit pamięci : 32 MB Słowa niedozwolone :