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.
def szyfr_vigenerea(tekst, haslo, tryb):alfabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"wynik = ""haslo = haslo.upper()numer_hasla = 0for znak in tekst.upper():if znak in alfabet:przesuniecie = alfabet.index(haslo[numer_hasla % len(haslo)])if tryb == "deszyfruj":przesuniecie = -przesunieciemiejsce = alfabet.index(znak)nowe_miejsce = (miejsce + przesuniecie) % len(alfabet)wynik = wynik + alfabet[nowe_miejsce]numer_hasla = numer_hasla + 1else:wynik = wynik + znakreturn wyniktajemna_wiadomosc = "TAJNA WIADOMOSC"haslo = "LAS"zaszyfrowana = szyfr_vigenerea(tajemna_wiadomosc, haslo, "szyfruj")print("Zaszyfrowana wiadomosc:", zaszyfrowana)odszyfrowana = szyfr_vigenerea(zaszyfrowana, haslo, "deszyfruj")print("Odszyfrowana wiadomosc:", odszyfrowana)