Szyfr Bifid
Szyfr Bifid łączy tabelę Polibiusza z przestawieniem współrzędnych liter. Najpierw każda litera wiadomości zostaje zamieniona na numer wiersza i kolumny w tabeli 5 × 5, zwykle z literami I i J w jednym polu.
Następnie wszystkie numery wierszy zapisuje się kolejno, a pod nimi wszystkie numery kolumn. Powstały ciąg liczb odczytuje się ponownie parami jako nowe współrzędne w tabeli. Dzięki temu jedna litera wpływa na szyfrowanie kolejnych znaków, więc szyfr jest trudniejszy niż zwykły szyfr Polibiusza.

Program w Pythonie
W linijkach 1-5 znajduje się funkcja znajdz_pozycje. Odszukuje ona literę w tabeli Polibiusza i zwraca jej numer wiersza oraz kolumny.
W linijkach 7-14 znajduje się zwykła tabela Polibiusza 5 × 5. Nie korzystamy tu z żadnego hasła. Litera J nie występuje w tabeli, ponieważ jest traktowana tak samo jak I.
W linijkach 17-22 program oczyszcza wiadomość. Zamienia litery na wielkie, J na I i pomija znaki, których nie ma w alfabecie, na przykład spacje oraz przecinki.
W linijkach 25-29 każda litera zostaje zamieniona na współrzędne. Dla słowa TEST program otrzymuje: 44, 15, 43, 44.
Podczas szyfrowania, w linijkach 33-41, program rozdziela numery wierszy i kolumn. Najpierw zapisuje wszystkie wiersze, a potem wszystkie kolumny. Następnie odczytuje nowy ciąg parami jako współrzędne kolejnych liter szyfrogramu.
Podczas deszyfrowania, w linijkach 42-48, program wykonuje operację odwrotną. Dzieli współrzędne szyfrogramu na dwie połowy: wiersze i kolumny, a później ponownie łączy je parami.
Dla zwykłej tabeli Polibiusza słowo TEST zostanie zaszyfrowane jako QTUO, a po deszyfrowaniu program ponownie otrzyma TEST.
def znajdz_pozycje(tabela, litera):for wiersz in range(5):for kolumna in range(5):if tabela[wiersz][kolumna] == litera:return wiersz, kolumnadef szyfr_bifid(tekst, tryb):tabela = ["ABCDE","FGHIK","LMNOP","QRSTU","VWXYZ"]alfabet = "ABCDEFGHIKLMNOPQRSTUVWXYZ"czysty_tekst = ""for znak in tekst.upper():if znak == "J":znak = "I"if znak in alfabet:czysty_tekst = czysty_tekst + znakliczby = []for litera in czysty_tekst:wiersz, kolumna = znajdz_pozycje(tabela, litera)liczby.append(wiersz + 1)liczby.append(kolumna + 1)wynik = ""if tryb == "szyfruj":wiersze = liczby[0::2]kolumny = liczby[1::2]nowe_liczby = wiersze + kolumnyfor i in range(0, len(nowe_liczby), 2):wiersz = nowe_liczby[i] - 1kolumna = nowe_liczby[i + 1] - 1wynik = wynik + tabela[wiersz][kolumna]else:polowa = len(liczby) // 2wiersze = liczby[0:polowa]kolumny = liczby[polowa:]for i in range(len(wiersze)):wynik = wynik + tabela[wiersze[i] - 1][kolumny[i] - 1]return wynikwiadomosc = "TEST"zaszyfrowana = szyfr_bifid(wiadomosc, "szyfruj")print("Zaszyfrowana wiadomość:", zaszyfrowana)odszyfrowana = szyfr_bifid(zaszyfrowana, "deszyfruj")print("Odszyfrowana wiadomość:", odszyfrowana)