Ugrás a tartalomhoz

Vigenère-rejtjel

A Wikiszótárból, a nyitott szótárból

Kiejtés

  • IPA: [ ˈviɡɛnèrɛrɛjcɛl]

Főnév

Vigenère-rejtjel

  1. (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

  1. 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.

  2. Kulcsszó alkalmazása

    A titkosításhoz egy kulcsszót használunk, amelyet folyamatosan ismételünk, hogy lefedje az üzenet teljes hosszát.

  3. 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.

  1. A kulcsszót ismételjük:

    TITKOSUZENET
    KULCSKULCSKU
  2. Titkosítás a Vigenère-táblázattal:

    • T + KD
    • I + UC
    • T + LE
    • K + CM
    • O + SG
    • stb.

Í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

  1. Bekéri a nyílt szöveget (max. 255 karakter).
  2. Eltávolítja az ékezetes karaktereket, kiszűri a nem betű karaktereket, és nagybetűssé alakítja a szöveget.
  3. Kiírja az átalakított nyílt szöveget a képernyőre.
  4. Bekéri a kulcsszót (max. 5 karakter), majd azt is nagybetűssé alakítja.
  5. Kulcsszöveget generál, amely a nyílt szöveg hosszával megegyező hosszúságú.
  6. Beolvassa a Vigenère-táblázatot a vtabla.dat fájlból.
  7. 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.
  8. Kiírja a kódolt szöveget a képernyőre és elmenti a kodolt.dat fá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