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.