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