Feladat: I.421 Korcsoport: - Nehézségi fok: -
Füzet: 2017/február, 98 - 99. oldal  PDF  |  MathML 
Témakör(ök): Feladat, Programozás, algoritmusok

A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre.

Az első világháborúban fontossá vált a rádión küldött üzenetek rejtjelezése, hogy azokat az ellenség ‐ lehallgatás esetén ‐ ne tudja megfejteni. A háború egyik leghíresebb titkosítási rendszere az ADFGVX kódolás volt, amit a németek vezettek be, és 1918. március 5-én kezdtek el alkalmazni. Egy francia hadnagy, Georges Painvin azonban viszonylag hamar, már június 2-án megfejtett egy ezzel a kóddal rejtjelezett üzenetet.
A rejtjelezésnél használt kulcs két részből áll: egy 6×6-os kódtáblából, amely tartalmazza a 26 nagybetűt és a 10 számjegyet, valamint egy kódszóból.

 
 

A kódtábla első sorát és első oszlopát kiegészítik az A, D, F, G, V, X karakterekkel, ezek lesznek a sor-, illetve az oszlopazonosítók. (Azért ezeket a karaktereket választották, mert az akkoriban használt, nekik megfelelő Morse jelek jól elkülöníthetőek voltak.)
A példánkban használt táblázat az ábrán látható, a kódszó legyen KOMAL, a nyílt szöveg pedig legyen: AZAKCIO7KORINDUL.
Maga a rejtjelezés több lépésből áll:
1. Meghatározzuk a kódtábla alapján a nyílt szöveg karaktereinek koordinátáit (sor, oszlop), és azokat egymás mellé írjuk:
 
 

2. A kódszó karakterei alá sorfolytonosan beírjuk az így kapott koordinátasorozatot. Példánkban ezt az első táblázat mutatja.
 
 

3. Átrendezzük a táblázat oszlopait úgy, hogy a kódszó betűi névsorba kerüljenek. Az átrendezés utáni állapotot példánkban a második táblázat szemlélteti.
4. A titkos üzenetet úgy kapjuk meg, hogy a második (kódszó nélküli) táblázatot ,,oszlopfolytonossá'' alakítjuk. Példánkban:
XAVDXXADGVFAVAGGVADXGDGGXDVXVGFV

Készítsünk programot i421 néven, amely lehetővé teszi egy megadott szöveg rejtjelezését és visszafejtését a fenti leírás alapján. A program első parancssori argumentuma egy karakter, amely megadja, hogy a felhasználó az adatokat rejtjelezni vagy visszafejteni szeretné (R/V), második a kódot tartalmazó fájl neve, a harmadik a rejtjelezendő/visszafejtendő adatokat tartalmazó fájl neve, a negyedik pedig a kimeneti fájl neve legyen. A kódot tartalmazó fájl első hat sora a kódtábla sorait tartalmazza (szóközök és a koordináták nélkül), utolsó sora pedig a kódszót.
 
 

Feltételezhetjük, hogy a bemeneti adatok csak az angol ábécé fentieknek megfelelő nagybetűit tartalmazzák. Feltehetjük továbbá, hogy a rejtjelezendő/visszafejtendő állomány mérete legfeljebb 1000 karakterből áll, továbbá a kódszó nem hosszabb 10 karakternél.
Beküldendő egy i421.zip tömörített állományban a program forráskódja és dokumentációja, amely tartalmazza a megoldás rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztői környezetben fordítható.
Letölthető fájlok (egy lehetséges kód, valamint egy lehetséges rejtjelezendő fájl): kod.txt, be.txt.