Vigenerova šifra a frekvenčná analýza
Na minulej hodine sme si ukazovali Cézarovu šifru. Takýto spôsob kódovania bol však strašne jednoduchý. Dnes sa preto pozrieme na ďalší typ šifrovania a tiež na nástroj, ktorý nám vie pri riešení šifier výrazne pomôcť.
Podúloha 1
Vigenerove šifrovanie má okrem textu (uložený v premennej text
) aj tajný kľúč (premenná key
). Následne
šifrovanie prebieha pomocou tohto kľúča a to nasledovne. Pod text sa napíše kľúč, písmeno pod písmeno. Ak je kľúč kratší ako text
(väčšinou je a aj si taký zvoľte) viackrát sa zopakuje. Následne sa písmená, ktoré sú pod sebou sčítajú. Každému písmenu abecedy
môžeme priradiť číslo od 0 (A) po 25 (Z). Zoberie sa preto písmeno textu a posunie sa o toľko písmen o koľko mu určuje písmeno
kľúča pod ním.
Vašou úlohou je naprogramovať takéto Vigenerove šifrovanie. Začnime tým, že vypíšeme, kľúč, text a niekoľkokrát zopakovaný kľúč, ktorým budeme náš text kódovať.
Asi najťažšia pasáž je vypísať zopakovaný kľúč. Zjavne potrebujem vypísať len(text)
písmen, písmen v premennej
key
je však menej. Ako zariadime, aby sa tieto písmená zopakovali? Existujú aspoň dva spôsoby. Skúste si napísať
aké hodnoty bude mať premenná v cykle a aké indexy majú písmená v key
, ktoré máte vypisovať. Ako to súvisí
len(key)
.
Podúloha 2
Ostáva už len sčítať dve pod sebou ležiace písmená. To by už malo ísť, iba si spomeňte na príkazy z minulej hodiny a použite predchádzajúce riešenie.
Čo takto si pri vypisovaní každého písmena vypočítať o koľko ho máme posunúť? Ako z písmena A dostať 0 pomocou ord()
?
A z písmena B dostať 1? Keď už máme posun, nie je to to isté ako posledná podúloha v Cézarovi.