Szyfr Bifid w celu zaszyfrowania danych korzysta z szachownicy Polibiusza oraz słowa kluczowego. Na podstawie słowa kluczowego tworzy się alfabet w którym najpierw występują pierwsze wystąpienia unikalnych liter z słowa klucza, a następnie dopisywane są pozostałe litery alfabetu. Znak I oraz J są nierozróżnialne. Tak przygotowany alfabet należy wpisać do szachownicy Polibiusza w spirali, zgodnie z ruchem wskazówek zegara począwszy od lewego, górnego rogu.
Szyfrując dane dla każdej litery należy znaleźć ich pozycje w szachownicy Polibiusza, a następnie zapisać w kolumnie pod daną literą. Numer wiersza ma się znajdować nad numerem kolumny. Następnie odczytywane są kolejne pary współrzędnych odczytując liczby kolejno najpierw z oznaczeń wierszy, a potem kolumn. Każda para jest później zamieniana na literę na podstawie szachownicy Polibiusza. Ze względu na to, że znaki interpunkcyjne nie są szyfrowane to zaleca się ich usunięcia.
Weźmy przykładowo słowo kluczowe "TAJNEHASLO". Na jego podstawie zostaje utworzony alfabet "TAINEHSLOBCDFGKMPQRUVWXYZ", które następnie zostaje zapisane do szachownicy Polibiusza w następujący sposób:
# | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
1 | T | A | I | N | E |
2 | M | P | Q | R | H |
3 | K | Y | Z | U | S |
4 | G | X | W | V | L |
5 | F | D | C | B | O |
Po przygotowaniu szachownicy można przejść do szyfrowania danych. Szyfrowanym tekstem jawnym będzie "TAJNAINFORMACJA". Na początek dla każdej litery szukamy jej współrzędnych w szachownicy Polibiusza:
Litera | T | A | J | N | A | I | N | F | O | R | M | A | C | J | A |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Wiersz | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 5 | 5 | 2 | 2 | 1 | 5 | 1 | 1 |
Kolumna | 1 | 2 | 3 | 4 | 2 | 3 | 4 | 1 | 5 | 4 | 1 | 2 | 3 | 3 | 2 |
Teraz kolejny krok polega na odczytaniu poziomo wiersza Wiersz potem Kolumna i pogrupować liczby parami tak, aby uzyskać współrzędne dla litery do szyfrogramu. Proces ten jest następujący:
Para | (1, 1) | (1, 1) | (1, 1) | (1, 5) | (5, 2) | (2, 1) | (5, 1) | (1, 1) | (2, 3) | (4, 2) | (3, 4) | (1, 5) | (4, 1) | (2, 3) | (3, 2) |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Szyfrogram | T | T | T | E | D | M | F | T | Q | X | U | E | G | Q | Y |
Zaszyfrowany tekst "TAJNAINFORMACJA" przy pomocy słowa kluczowego "TAJNEHASLO" to "TTTEDMFTQXUEGQY".
Należy utworzyć szachownicę Polibiusza, a następnie odwrócić proces szyfrowania. Uwaga ze względu na zastosowanie szachownicy Polibiusza litery I oraz J są nierozróżnialne, więc rozszyfrowywując utworzony wcześniej szyfrogram otrzymamy nie "TAJNAINFORMACJA", a "TAINAINFORMACIA".
Pierwszą zasadniczą funkcją potrzebną do poprawnego działania programu jest napisanie funkcji utworzSzachownice(), która pozwoli na wygenerowanie szachownicy Polibiusza na podstawie podanego słowa klucz.
Na początek (2.) deklarowana jest zmienna do przechowywania utworzonego alfabetu. Potem (3. - 9.) z podanego słowa klucz wybieranego są kolejne unikalne litery z uwzględnieniem faktu, że jak trafimy na J to jest to I. Potem (10. - 14.) alfabet jest uzupełniany pozostałymi literami z alfabetu łacińskiego. (15.) Szachownica będzie przechowywana jako tekst. Początkowo przypisywana jest wartość zmiennej alfabet (praktycznie chodzi o to by szachownica miała taką samą długość jak alfabet). Po (16. - 23.) transpozycji elementów (24.) zwracana jest szachownica.
Strategia dokonywania transpozycji polega na tym, aby na bieżąco przechowywać aktualną pozycję zapisu (x, y), jej przesunięcie (przesx, przesy) oraz wymiary ograniczeń (lewy, prawy, gora, dol). Początkowo ograniczenia wskazują kolejno na pierwszą kolumnę i ostatnią, pierwszy wiersz i ostatni. Potem w momencie, gdy dojdzie do odbicia w prawo podczas zapisu to ograniczenia będą odpowiednio modyfikowane. Poniższy kod umożliwia przesuwanie miejsca zapisu po spirali:
Funkcja szyfrująca przyjmuje dwa argumenty: tekst - tekst jawny do zaszyfrowania oraz klucz - słowo klucz użyte do utworzenia szachownicy.
(2.) Na początku należy utworzyć szachownice oraz (3.) zaalokować miejsce pod wartości współrzędnych. Potem (4. - 10.) dla każdej litery znajdź pozycję w szachownicy i na jej podstawie wylicz wiersz oraz kolumne. Potem (11.) utwórz wynik i (12. - 13.) przetłumacz kolejne pary liczb na znaki z szachownicy. (14.) Dealokuj niepotrzebną pamięć i (15.) zwróć wynik.
Funkcja deszyfrująca działa analogicznie do funkcji szyfruj i przyjmuje dwa argumenty: tekst - szyfrogram do rozszyfrowania oraz klucz - słowo klucz użyte do utworzenia szachownicy.
W celu przestowania działania napisanych funkcji szyfrującej i rozszyfrującej można skorzystać z poniższego fragmentu kodu: