Készíts egy egyszerű, a Caesaréhoz hasonló eltolásos rejtjelet és egy biztonságosabb helyettesítéses rejtjelet.
„Ha volt valami titkolnivalója, rejtjellel írta meg, mégpedig úgy, hogy az ábécé betűinek sorrendjét megváltoztatta, s így egyetlen szót sem lehetett kiolvasni. Aki meg akarja fejteni ezeket, és meg akarja érteni a jelentésüket, annak az ábécé negyedik betűjét, vagyis a D-t kell az A helyére tennie, és így tovább a többi betűvel.”
A rejtjelek nagyon egyszerű algoritmusok: segítségükkel a szöveget kevésbé olvashatóvá tehetjük, miközben a megfejtése továbbra is könnyű marad. Sokféle kriptoanalízissel szemben sebezhetők, de Caesar szerencsés volt: az ellenségei nem voltak kriptoanalitikusok.
A Caesar-rejtjelet Julius Caesar néhány távolba küldött üzenetéhez használták. Caesar persze tudta, hogy a rejtjel nem valami jó, de ebben volt egy szövetségese: szinte senki sem tudott jól olvasni. Így az is elég volt, hogy néhány betűvel eltért a szöveg, és az emberek már fel sem ismerték azt a kevés szót, amit egyáltalán ismertek.
A feladatod, hogy készíts egy egyszerű eltolásos rejtjelet a Caesar-rejtjelhez hasonlóan. Ez a kép remek példa a Caesar-rejtjelre:
![]()
Például:
Ha az „iamapandabear” szöveget adjuk be a kódoló függvénynek, az „ldpdsdqgdehdu” rejtjelet adja vissza. Elég homályos ahhoz, hogy az üzenetünk titokban maradjon az úton.
Ha az „ldpdsdqgdehdu” szöveget a dekódoló függvénybe tesszük, az visszaadja az eredeti „iamapandabear” szöveget, így a barátod el tudja olvasni az eredeti üzenetedet.
Az eltolásos rejtjelek gyorsan hasznavehetetlenné válnak, ha az ellenfél parancsnoka rájön a működésükre. Ezért próbáljunk meg helyette helyettesítéses rejtjelet használni. Módosítsd a kódot úgy, hogy megadhassunk egy kulcsot, és az határozza meg az eltolás mértékét.
Íme egy példa:
Ha a kulcs „aaaaaaaaaaaaaaaaaa”, akkor az „iamapandabear” szöveg kódolása az eredeti „iamapandabear” szöveget adja vissza.
Ha a kulcs „ddddddddddddddddd”, akkor az „iamapandabear” szövegünk kódolása a homályos „ldpdsdqgdehdu” szöveget adná vissza.
A fenti példában a kulcs értékénél a = 0-t állítottunk be. Így amikor a nyílt szöveget hozzáadjuk a kulcshoz, ugyanaz az üzenet jön ki. Tehát az „aaaa” nem ideális kulcs. Ha viszont a kulcsot „dddd”-re állítjuk, ugyanazt kapjuk, mint a Caesar-rejtjel esetében.
Minden rejtjel leggyengébb láncszeme az ember. Tegyük a helyettesítéses rejtjeledet egy kicsit hibátűrőbbé azzal, hogy gondoskodunk egy véletlenszerűség-forrásról, és biztosítjuk, hogy a kulcs csak kisbetűket tartalmaz.
Ha valaki egyáltalán nem ad meg kulcsot, generálj egy valóban véletlenszerű kulcsot, amely legalább 100 kisbetűből áll.
Az eltolásos rejtjelek annyit tesznek, hogy a szöveget kicsit furcsává teszik, de érzékenyek a gyakoriságelemzésre. A helyettesítéses rejtjelek ezen segítenek, de még mindig nagyon sebezhetők, ha a kulcs rövid, vagy ha a szóközök megmaradnak. Később látni fogsz egy megoldást erre a problémára a „crypto-square” feladatban.
Ha tovább szeretnél mélyülni ezen a területen, a kérdések lassan arról szólnak, hogyan cserélhetünk kulcsot biztonságos módon. Nézd meg a Diffie-Hellman a Wikipédián oldalt, ahol ennek a sémának az egyik első megvalósításáról olvashatsz.
Ha az indexek túllépik a határt, próbáld aritmetikai műveletekkel, például a modulo segítségével körbeérni őket. A Character és String osztályok is a barátaid.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Pharo nyelvet 50 feladat segítségével, valódi emberi mentorálással, mindez ingyen.