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.

  1. def znajdz_pozycje(tabela, litera):
  2. for wiersz in range(5):
  3. for kolumna in range(5):
  4. if tabela[wiersz][kolumna] == litera:
  5. return wiersz, kolumna
  6. def szyfr_bifid(tekst, tryb):
  7. tabela = [
  8. "ABCDE",
  9. "FGHIK",
  10. "LMNOP",
  11. "QRSTU",
  12. "VWXYZ"
  13. ]
  14. alfabet = "ABCDEFGHIKLMNOPQRSTUVWXYZ"
  15. czysty_tekst = ""
  16. for znak in tekst.upper():
  17. if znak == "J":
  18. znak = "I"
  19. if znak in alfabet:
  20. czysty_tekst = czysty_tekst + znak
  21. liczby = []
  22. for litera in czysty_tekst:
  23. wiersz, kolumna = znajdz_pozycje(tabela, litera)
  24. liczby.append(wiersz + 1)
  25. liczby.append(kolumna + 1)
  26. wynik = ""
  27. if tryb == "szyfruj":
  28. wiersze = liczby[0::2]
  29. kolumny = liczby[1::2]
  30. nowe_liczby = wiersze + kolumny
  31. for i in range(0, len(nowe_liczby), 2):
  32. wiersz = nowe_liczby[i] - 1
  33. kolumna = nowe_liczby[i + 1] - 1
  34. wynik = wynik + tabela[wiersz][kolumna]
  35. else:
  36. polowa = len(liczby) // 2
  37. wiersze = liczby[0:polowa]
  38. kolumny = liczby[polowa:]
  39. for i in range(len(wiersze)):
  40. wynik = wynik + tabela[wiersze[i] - 1][kolumny[i] - 1]
  41. return wynik
  42. wiadomosc = "TEST"
  43. zaszyfrowana = szyfr_bifid(wiadomosc, "szyfruj")
  44. print("Zaszyfrowana wiadomość:", zaszyfrowana)
  45. odszyfrowana = szyfr_bifid(zaszyfrowana, "deszyfruj")
  46. print("Odszyfrowana wiadomość:", odszyfrowana)

Szyfr Bifid – narzędzie

SzyfrujTryb
5 x 5Tabela Polibiusza
0Znaków w tekście

Wiadomość

0 znaków

Wynik

0 znaków

Przewijanie do góry