Szyfr Vigenère’a

Szyfr Vigenère’a to klasyczny szyfr wykorzystujący tajne hasło. Hasło jest powtarzane pod całą wiadomością, a każda jego litera wyznacza inne przesunięcie w alfabecie. Dzięki temu kolejne litery tekstu mogą być szyfrowane w różny sposób, a nie jednym stałym przesunięciem jak w szyfrze Cezara. Aby odszyfrować wiadomość, używa się tego samego hasła i cofa odpowiednie przesunięcia.

Program w Pythonie

W linijkach 1-22 znajduje się funkcja szyfr_vigenerea. To najważniejsza część programu, ponieważ wykonuje szyfrowanie albo deszyfrowanie tekstu. Funkcja otrzymuje trzy informacje: wiadomość tekst, tajne słowo haslo oraz tryb, czyli informację, czy program ma szyfrować, czy deszyfrować.

W linijce 2 zapisany jest alfabet angielski, którego program używa do znajdowania pozycji liter. W linijce 3 tworzona jest pusta zmienna wynik, do której będą dopisywane kolejne zaszyfrowane litery. W linijce 4 hasło zostaje zapisane wielkimi literami, aby jego litery pasowały do alfabetu. Zmienna numer_hasla z linijki 5 pilnuje, która litera hasła ma zostać użyta przy kolejnej literze wiadomości.

W linijkach 7-20 program przechodzi po kolei przez każdy znak tekstu. Jeżeli znak jest literą z alfabetu, w linijce 9 program wybiera odpowiednią literę hasła. Zapis numer_hasla % len(haslo) sprawia, że po dojściu do końca hasła program wraca do jego początku. Dzięki temu hasło jest powtarzane tyle razy, ile potrzeba, na przykład LASLASLAS....

W linijkach 11-12 program sprawdza, czy wybrano tryb deszyfruj. Jeśli tak, zmienia przesunięcie na ujemne, czyli będzie cofał litery. W linijce 14 znajduje miejsce litery wiadomości w alfabecie. Następnie w linijce 15 dodaje przesunięcie wynikające z litery hasła. Zapis % len(alfabet) pozwala wrócić na początek alfabetu, gdy przesunięcie wyjdzie poza literę Z.

W linijce 16 nowa litera zostaje dopisana do zmiennej wynik, a w linijce 18 program przechodzi do kolejnej litery hasła. Jeśli napotka spację, cyfrę lub znak interpunkcyjny, wykonuje część else z linijek 19-20. Taki znak zostaje dopisany bez zmian i nie zużywa litery hasła.

W linijce 22 funkcja zwraca gotową zaszyfrowaną albo odszyfrowaną wiadomość. W linijkach 24-25 zapisujemy wiadomość oraz hasło. W linijkach 27-28 program szyfruje wiadomość i wyświetla wynik. W linijkach 30-31 ponownie wywołuje funkcję, tym razem w trybie deszyfrowania, aby odczytać wcześniej zaszyfrowany tekst.

  1. def szyfr_vigenerea(tekst, haslo, tryb):
  2. alfabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  3. wynik = ""
  4. haslo = haslo.upper()
  5. numer_hasla = 0
  6. for znak in tekst.upper():
  7. if znak in alfabet:
  8. przesuniecie = alfabet.index(haslo[numer_hasla % len(haslo)])
  9. if tryb == "deszyfruj":
  10. przesuniecie = -przesuniecie
  11. miejsce = alfabet.index(znak)
  12. nowe_miejsce = (miejsce + przesuniecie) % len(alfabet)
  13. wynik = wynik + alfabet[nowe_miejsce]
  14. numer_hasla = numer_hasla + 1
  15. else:
  16. wynik = wynik + znak
  17. return wynik
  18. tajemna_wiadomosc = "TAJNA WIADOMOSC"
  19. haslo = "LAS"
  20. zaszyfrowana = szyfr_vigenerea(tajemna_wiadomosc, haslo, "szyfruj")
  21. print("Zaszyfrowana wiadomosc:", zaszyfrowana)
  22. odszyfrowana = szyfr_vigenerea(zaszyfrowana, haslo, "deszyfruj")
  23. print("Odszyfrowana wiadomosc:", odszyfrowana)

Szyfr Vigenère’a – narzędzie

SzyfrujTryb
LASHasło
0Liter w tekście

Wiadomość

0 znaków

Wynik

0 znaków

Przewijanie do góry