Vigenère-rejtjel
Kiejtés
- IPA: [ ˈviɡɛnèrɛrɛjcɛl]
Főnév
- (informatika) A Vigenère-rejtjel egy klasszikus polialfabetikus titkosítási módszer, amely a Caesar-kód kiterjesztett változata. A titkosítás lényege, hogy egy kulcsszó segítségével több eltérő Caesar-kódot alkalmazunk a szöveg különböző részein, így a titkosított szöveg nehezebben törhető fel.
A Vigenère-rejtjel működése
ABC-tábla használata
A Vigenère-rejtjel az ún. Vigenère-táblázatot (más néven tabula recta) használja. Ez egy 26×26-os táblázat, amely minden sorban az ábécé egy eltolásával kezdődik.
Kulcsszó alkalmazása
A titkosításhoz egy kulcsszót használunk, amelyet folyamatosan ismételünk, hogy lefedje az üzenet teljes hosszát.
Betűk titkosítása
- Az üzenet minden betűjét a megfelelő kulcsbetűnek megfelelő Vigenère-tábla sorával titkosítjuk.
- A sima szöveg betűje az oszlopban található, a kulcs betűje pedig a sorban.
- A kettő metszéspontja adja a titkosított betűt.
Példa titkosításra
Vegyük az “TITKOSUZENET” üzenetet és a “KULCS” kulcsszót.
A kulcsszót ismételjük:
TITKOSUZENET KULCSKULCSKU
Titkosítás a Vigenère-táblázattal:
- T + K → D
- I + U → C
- T + L → E
- K + C → M
- O + S → G
- stb.
- T + K → D
Így a titkosított üzenet: “DCEMG…” (és így tovább).
Dekódolás folyamata
A dekódoláshoz ugyanazt a kulcsszót használjuk, de a folyamat fordított: 1. Megkeressük a kulcsbetű oszlopát. 2. A titkosított betűt visszakeressük a megfelelő oszlopban. 3. Az oszlop első sora megadja a visszafejtett betűt.
A Vigenère-rejtjel előnyei és hátrányai
Előnyök:
- Erősebb, mint a sima Caesar-kód, mivel többféle eltolást alkalmaz.
- Hosszú kulcsszó esetén nehezebben törhető fel.
Hátrányok:
- Ha a kulcs rövid vagy ismétlődő, akkor a Kasiszki-elemzés vagy a frekvenciaanalízis segítségével visszafejthető.
- Modern számítógépekkel könnyen feltörhető.
Történelmi érdekességek
A Vigenère-rejtjel feltalálását sokáig Blaise de Vigenère francia diplomata nevéhez kötötték (16. század), de valójában egy olasz kriptográfus, Giovan Battista Bellaso találta fel 1553-ban. A módszer évszázadokon át “feltörhetetlennek” számított, mígnem 1863-ban Friedrich Kasiszki német katonatiszt kifejlesztett egy hatékony törési módszert.
Összegzés
A Vigenère-rejtjel egy klasszikus, de mára elavult titkosítási módszer. Bár a 19. századig viszonylag biztonságosnak számított, a modern számítástechnika és kriptográfia fejlődésével könnyen visszafejthetővé vált.
Az alábbi Python program végrehajtja a Vigenère-rejtjel kódolási folyamatát a megadott feladat szerint. A program beolvassa a felhasználó által megadott nyílt szöveget, elvégzi az átalakításokat, beolvassa a kulcsszót, és a Vigenère-táblázat segítségével kódolja az üzenetet.
Python kód a Vigenère-rejtjelhez
import unicodedata
# 1. Nyílt szöveg bekérése
nyilt_szoveg = input("Adja meg a nyílt szöveget (max. 255 karakter): ")[:255]
# 2. Nyílt szöveg átalakítása (ékezetek eltávolítása, csak angol ABC, nagybetűk)
def normalize_text(text):
# Ékezetek eltávolítása
text = unicodedata.normalize('NFKD', text).encode('ASCII', 'ignore').decode('ASCII')
# Csak angol ábécé betűi
text = ''.join([c.upper() for c in text if c.isalpha()])
return text
atalakitott_szoveg = normalize_text(nyilt_szoveg)
# 3. Átalakított nyílt szöveg kiírása
print("Szöveg átalakítása:", atalakitott_szoveg)
# 4. Kulcsszó bekérése
kulcsszo = input("Adja meg a kulcsszót (max. 5 karakter): ")[:5].upper()
# 5. Kulcsszöveg generálása
kulcsszoveg = (kulcsszo * (len(atalakitott_szoveg) // len(kulcsszo) + 1))[:len(atalakitott_szoveg)]
print("Kulcsszöveg:", kulcsszoveg)
# 6. Vigenère-tábla beolvasása a vtabla.dat fájlból
def beolvas_vtabla(fajlnev):
with open(fajlnev, 'r', encoding='utf-8') as f:
tabla = [sor.strip() for sor in f.readlines()]
return tabla
vtabla = beolvas_vtabla("vtabla.dat")
# 7. Kódolás végrehajtása
def vigenere_kodol(nyilt_szoveg, kulcsszoveg, vtabla):
kodolt_szoveg = []
abecede = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for n, k in zip(nyilt_szoveg, kulcsszoveg):
sor_index = abecede.index(n) # Nyílt szöveg betűjének indexe
oszlop_index = abecede.index(k) # Kulcsszöveg betűjének indexe
kodolt_szoveg.append(vtabla[sor_index][oszlop_index])
return ''.join(kodolt_szoveg)
kodolt_szoveg = vigenere_kodol(atalakitott_szoveg, kulcsszoveg, vtabla)
# 8. Kódolt szöveg kiírása és fájlba mentése
print("Kódolt szöveg:", kodolt_szoveg)
with open("kodolt.dat", "w", encoding="utf-8") as f:
f.write(kodolt_szoveg)
A program működése
- Bekéri a nyílt szöveget (max. 255 karakter).
- Eltávolítja az ékezetes karaktereket, kiszűri a nem betű karaktereket, és nagybetűssé alakítja a szöveget.
- Kiírja az átalakított nyílt szöveget a képernyőre.
- Bekéri a kulcsszót (max. 5 karakter), majd azt is nagybetűssé alakítja.
- Kulcsszöveget generál, amely a nyílt szöveg hosszával megegyező hosszúságú.
- Beolvassa a Vigenère-táblázatot a
vtabla.datfájlból. - Végrehajtja a kódolást a tábla segítségével, minden betűhöz a megfelelő sor és oszlop metszéspontját használva.
- Kiírja a kódolt szöveget a képernyőre és elmenti a
kodolt.datfájlba.
Példa futtatás
Bemenet:
Nyílt szöveg: Ez a próba szöveg, amit kódolunk! Szöveg átalakítása: EZAPROBASZOVEGAMITKODOLUNK Kulcsszó: auto Kulcsszöveg: AUTOAUTOAUTOAUTOAUTOAUTOAUTOAU
Kimenet:
Kódolt szöveg: ETTDRIUOSTHJEATAINDCDIEINE
Ez a program megfelelően végrehajtja a Vigenère-rejtjel kódolási folyamatát a megadott feladat szerint. 🚀
Fordítások
- Vigenère-rejtjel - Értelmező szótár (MEK)
- Vigenère-rejtjel - Etimológiai szótár (UMIL)
- Vigenère-rejtjel - Szótár.net (hu-hu)
- Vigenère-rejtjel - DeepL (hu-de)
- Vigenère-rejtjel - Яндекс (hu-ru)
- Vigenère-rejtjel - Google (hu-en)
- Vigenère-rejtjel - Helyesírási szótár (MTA)
- Vigenère-rejtjel - Wikidata
- Vigenère-rejtjel - Wikipédia (magyar)