Szyfr Vigenère’a

Szyfr Vigenère’a to klasyczny szyfr, który używa serii różnych szyfrów przesuwnych na podstawie liter klucza. Jest to prosty rodzaj szyfru wieloalfabetowego. Poniżej znajduje się wyjaśnienie działania szyfru Vigenère’a oraz implementacja w języku Python.

Działanie szyfru Vigenère’a

Klucz to słowo lub fraza powtarzane, aby osiągnąć długość tekstu jawnego.
Szyfrowanie - każda litera tekstu jawnego jest przesuwana o wartość odpowiadającą literze klucza.

Przykład

Tekst jawny: HELLO

Klucz: KEY (powtarzany do osiągnięcia długości tekstu jawnego, czyli 5 liter czyli w tym przypadku KEYKE)

Szyfrowanie:

  • H - 8 litera alfabetu, dlatego H (7), numerując od zera
  • K - 11 litera alfabetu, dlatego H (10), numerując od zera
  • R - 18 litera alfabetu, dlatego R (17), numerując od zera

H (7) + K (10) = R (17)

E (4) + E (4) = I (8)

L (11) + Y (24) = J (9)

L (11) + K (10) = V (21)

O (14) + E (4) = S (18)

Zaszyfrowany tekst: RIJVS

Implementacja szyfru Vigenère’a w języku Python

Poniżej znajduje się kod w Pythonie, który implementuje szyfrowanie i deszyfrowanie szyfrem Vigenère’a.

def generate_key(text, key):
    key = list(key)
    if len(text) == len(key):
        return "".join(key)
    else:
        for i in range(len(text) - len(key)):
            key.append(key[i % len(key)])
    return "".join(key)
def vigenere_encrypt(plaintext, key):
    ciphertext = []
    for i in range(len(plaintext)):
        x = (ord(plaintext[i]) + ord(key[i])) % 26
        x += ord('A')
        ciphertext.append(chr(x))
    return "".join(ciphertext)
def vigenere_decrypt(ciphertext, key):
    plaintext = []
    for i in range(len(ciphertext)):
        x = (ord(ciphertext[i]) - ord(key[i]) + 26) % 26
        x += ord('A')
        plaintext.append(chr(x))
    return "".join(plaintext)

# Przykład użycia
text = "HELLO"
key = "KEY"

# Generowanie pełnego klucza
full_key = generate_key(plaintext, key)

# Szyfrowanie
ciphertext = vigenere_encrypt(plaintext, full_key)
print("Zaszyfrowany tekst:", ciphertext)

# Deszyfrowanie
decrypted_text = vigenere_decrypt(ciphertext, full_key)
print("Odszyfrowany tekst:", decrypted_text)

Ten kod pozwala na szyfrowanie i deszyfrowanie tekstu za pomocą szyfru Vigenère’a, demonstrując jego działanie. Można go rozszerzyć o dodatkowe funkcje, takie jak obsługa małych liter lub inne symbole.

Komentarze