Szyfr Polibiusza
Szyfr Polibiusza polega na zapisaniu liter w tabeli, a następnie zastępowaniu każdej litery parą liczb, które wskazują jej położenie w tej tabeli. Najczęściej używa się kwadratu 5 x 5, dlatego w jednej kratce umieszcza się razem litery I/J, aby zmieścić cały alfabet.
Każda litera otrzymuje więc swój adres: pierwsza liczba oznacza wiersz, a druga kolumnę. Na przykład, jeśli A znajduje się w pierwszym wierszu i pierwszej kolumnie, zapisujemy ją jako 11. Jeśli B jest w pierwszym wierszu i drugiej kolumnie, zapisujemy ją jako 12.
Deszyfrowanie działa odwrotnie. Odczytujemy parę liczb, sprawdzamy odpowiedni wiersz i kolumnę w tabeli, a następnie zapisujemy znajdującą się tam literę. Szyfr Polibiusza jest dobry do nauki, ponieważ pokazuje, że tekst można ukrywać za pomocą współrzędnych, podobnie jak odczytuje się pola na planszy.

Program w Pythonie
W linijkach 1-37 znajduje się funkcja szyfr_polibiusza, czyli główna część programu. Funkcja dostaje dwa argumenty: tekst, czyli wiadomość do zaszyfrowania albo odszyfrowania, oraz tryb, który decyduje, czy program ma szyfrować, czy deszyfrować.
W linijkach 2-8 utworzona jest tablica dwuwymiarowa tabela. Każda wewnętrzna lista jest jednym wierszem kwadratu Polibiusza. Pierwszy wiersz zawiera litery A, B, C, D, E, drugi F, G, H, I, K i tak dalej. Litery J nie ma osobno, ponieważ w klasycznym szyfrze Polibiusza I oraz J zajmują to samo pole. W linijce 9 powstaje pusta zmienna wynik, do której program będzie dopisywał pary cyfr albo odszyfrowane litery.
W linijkach 11-25 znajduje się część odpowiedzialna za szyfrowanie. Program przechodzi po kolei przez każdy znak wiadomości zamienionej na wielkie litery. Jeśli trafi na J, zamienia je na I. Jeśli trafi na spację, dopisuje /, żeby zaznaczyć przerwę między wyrazami.
W linijkach 18-23 program szuka litery w tabeli. Pierwsza pętla przechodzi przez wiersze, a druga przez kolumny. Kiedy program znajdzie szukaną literę, tworzy jej kod z numeru wiersza i kolumny. Do obu wartości dodaje 1, ponieważ Python liczy od zera, a w szyfrze Polibiusza numerację zaczynamy od jedynki. Dlatego litera K, która w Pythonie znajduje się w miejscu tabela[1][4], w szyfrze jest zapisana jako 25.
W linijce 23 utworzony kod zostaje dopisany do zmiennej wynik, a po nim dodawana jest spacja. W linijce 25 funkcja zwraca gotową zaszyfrowaną wiadomość. strip() usuwa zbędną spację z końca tekstu.
W linijkach 27-37 działa część odpowiedzialna za deszyfrowanie. Program dzieli szyfrogram na osobne kody za pomocą split(). Jeśli trafi na /, dopisuje spację. W innym przypadku pierwszą cyfrę kodu traktuje jako numer wiersza, a drugą jako numer kolumny.
W linijkach 33-35 program odejmuje 1 od numeru wiersza i kolumny, ponieważ musi wrócić do sposobu liczenia używanego przez Pythona. Następnie pobiera odpowiednią literę z tablicy, na przykład kod 25 oznacza tabela[1][4], czyli literę K.
W linijce 39 zapisana jest wiadomość KOT MA KOD. W linijkach 41-42 program szyfruje ją i wypisuje wynik na ekranie. W linijkach 44-45 ta sama funkcja zostaje użyta ponownie, tym razem do odszyfrowania wiadomości.
def szyfr_polibiusza(tekst, tryb):tabela = [["A", "B", "C", "D", "E"],["F", "G", "H", "I", "K"],["L", "M", "N", "O", "P"],["Q", "R", "S", "T", "U"],["V", "W", "X", "Y", "Z"]]wynik = ""if tryb == "szyfruj":for znak in tekst.upper():if znak == "J":znak = "I"if znak == " ":wynik = wynik + "/ "else:for wiersz in range(5):for kolumna in range(5):if tabela[wiersz][kolumna] == znak:kod = str(wiersz + 1) + str(kolumna + 1)wynik = wynik + kod + " "return wynik.strip()else:kody = tekst.split()for kod in kody:if kod == "/":wynik = wynik + " "else:wiersz = int(kod[0]) - 1kolumna = int(kod[1]) - 1wynik = wynik + tabela[wiersz][kolumna]return wyniktajemna_wiadomosc = "KOT MA KOD"zaszyfrowana = szyfr_polibiusza(tajemna_wiadomosc, "szyfruj")print("Zaszyfrowana wiadomość:", zaszyfrowana)odszyfrowana = szyfr_polibiusza(zaszyfrowana, "deszyfruj")print("Odszyfrowana wiadomość:", odszyfrowana)