Szyfrowanie Pollux polega na zaszyfrowaniu informacji zakodowanej przy pomocy alfabetu Morse'a. Każdemu z trzech znaków przypisana jest pewna grupa cyfr szyfrujących z której wybierana jest losowana jedna cyfra, która zastąpi dany znak. Dane są szyfrowane na podstawie przyporządkowania cyfr do znaków wprowadzonego przez użytkownika.
Przyjmuje się, że każdemu znakowi najlepiej przypisać po tyle samo cyfr w grupie i ostatnią wolną cyfrę dołączyć do którejkolwiek z grup. W ten sposób powstaje największa szansa na wylosowanie bardzo zróżnicowanego szyfrogramu. Zazwyczaj czwarty znak przypisuje się znakowi pomiędzy słowami, ponieważ bardzo łatwo go wykryć podczas próby łamania szyfrogramu.
Na początek należy ustalić przyporządkowanie grupy cyfr do każdego znaku występującego w alfabecie Morse'a. Przyjmujemy, że są nimi: kropka (sygnał krótki), myślnik (sygnał długi) oraz spacja (znak przerwy pomiędzy wyrazami). Weźmy przykładowo następujące przyporządkowanie:
Cyfra | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
Znak | . | - | - | . | . | - | . |
Szyfrowane będzie wyrażenie "TEKST". Przed szyfrowaniem kolejnych znaków należy najpierw zakodować dane zgodnie z Alfabetem Morse'a. W tym przypadku zakodowany tekst to: - . -.- ... -. Teraz można przejść do losowania cyfr dla każdego znaku. Przykładowo dla pierwszego myślnika losujemy jedną cyfrę z listy {1, 2, 7}, a dla drugiego znaku spacji z listy {4, 6, 8}. Przykładowy szyfrogram wygląda następująco:
Znak | - | . | - | . | - | . | . | . | - | ||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Los | 7 | 4 | 3 | 4 | 2 | 9 | 1 | 6 | 5 | 0 | 5 | 6 | 7 |
Otrzymany szyfrogram to 7434291650567, ale nie jest to jedyne poprawne rozwiązanie, ponieważ każdy znak można wylosować na kilka sposobów.
Niniejsza implementacja szyfru Pollux zakłada, że posiadamy funkcje do kodowania i dekodowania informacji zapisanych przy pomocy alfabetu Morse'a. Informacje dotycząca przechowywania/wczytywania alfabetu oraz kodowania można przeczytać tutaj.
Funkcja szyfrująca szyfruj() przyjmuje trzy argumenty: alfabet - wczytany alfabet klucz-wartość, txt - tekst do zaszyfrowania oraz zamiany - przyporządkowanie takie, że i-ty znak wskazuje przyporządkowanie cyfry i-1.
W celu zaszyfrowania danych należy najpierw (2.) zakodować go przy pomocy alfabetu Morse'a, a następnie (4. - 9.) dla każdego znaku wylosować cyfrę, która go zastąpi. Ze względu na to, że zakładamy poprawność danych wejściowych losowanie cyfry polega na (5.) wylosowaniu dowolnej pozycji, a następnie (6. - 7.) przechodzeniu w prawo, aby znaleźć cyfrę z grupy danego znaku i (8.) dopisaniu znaku do wyniku. Na koniec (10.) zwracamy wynik czyli szyfrogram złożony z cyfr.
Podczas rozszyfrowania danych należy podać te same argumenty co podczas szyfrowania, aby funkcja odszyfruj() mogła odszyfrować informacje.
(2.) Przygotuj zmienną wynikową, a następnie (3. - 4.) rozkoduj każde kolejne cyfry i (5.) zwróć rozkodowany alfabet Morse'a.
Poniższy fragment kodu wczyta od użytkownika przyporządkowania cyfr do znaków, a nastepnie na tej podstawie wygeneruje szyfrogram oraz pokaże rozszyfrowany tekst, aby można było sprawdzić czy funkcje działają poprawnie.