﻿<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="/cjs/examples.screen.xsl" media="screen"?>
<examples chapter="Procvičování – šifry" directory="procvicovani">

    <note>
        Autorem původního zadání u příkladů 1-2 je Bedřich Košata.
    </note>

<!--
  <example>
    <text>
    </text>
    <hint>
    </hint>
    <solution src="procvicovani/sifry/.py" lang="python" />
  </example>
-->


  <example>
    <text>
        Napište program pro <em>Césarovu šifru</em>. Tato šifra je založena na posouvání písmen o 3 pozice v abecedě (tj. a→d, m→p, z→c). Program by měl obsahovat funkce jak pro zašifrování, tak pro dešifrování takové šifry. Tyto funkce by měly brát řetězec a vrátit jeho zašifrovanou/dešifrovanou podobu. 
    </text>
    <hint>
        Možná by se vám docela mohl hodit modul <em>string</em>, obsahuje totiž takové zajímavé „konstanty“ jako <em>string.ascii_uppercase</em> a podobné.
    </hint>
  </example>

  <example>
    <text>
        Upravte předchozí program, aby umožňoval posouvání písmen i o jiné hodnoty než 3. (Zvolený krok posunu se dá označit písmenem na příslušném místě, text podle původní Césarovy šifry je pak v tomto označení zašifrován písmenem <em>d</em>.)
    </text>
  </example>

  <example>
    <text>
        Použijte funkce z předchozího cvičení pro zjištění posuvu (a tím pádem i rozšifrování) následujícího zašifrovaného textu, a to hrubou silou (prostě automaticky vyzkoušejte všechny možné posuny a vyberte ten správný).
        <br/>&#160;&#160;&#160;
        Zašifrovaný text: <code>LYJUZJU DQ IJHQDAQSX FUDJQNVHYUDTI.UK. IJHQDAO ZIEK LUDELQDO LIUC VEJEQFQHQJKC FUDJQN Q TYWYJQBDYC PHSQTBELAQC IQCIKDW.</code>
    </text>
  </example>

  <example>
    <text>
        Napište program pro <em>Vigenèrovu šifru</em>. Podobně jako u Césarovy šifry dochází k posunu písmen, ale tento posun není určen pouze jedním vybraným číslem (a tedy vlastně písmenem), nýbrž celým klíčovým slovem (heslem) nebo dokonce delším textem. Po sobě jdoucí písmena původní zprávy jsou tedy vlastně šifrována Césarovými šiframi s různým krokem. Příklad s heslem <em>heslo</em>:
        <br/>&#160;&#160;&#160;
        <table>
            <!-- Mozilla snad pořád nedává styly pro col… -->
            <col/>
            <col style="font-family: monospace;"/>
            <tr><th>zpráva:</th><td><code>PYTHON JE FAJN</code></td></tr>
            <tr><th>heslo:</th><td><code>HESLOH ES LOHE</code></td></tr>
            <tr><th>výstup:</th><td><code>WCLSCU NW QOQR</code></td></tr>
        </table>
    </text>
    <hint>
        Podle <a href="http://cs.wikipedia.org/wiki/Vigen%C3%A8rova_%C5%A1ifra" class="external">Wikipedie</a> však Blaise de Vigenèr přišel s touto šifrou v roce 1586, tedy až třicet tři let potom, co Giovan Battista Bellaso tímto způsobem zobecnil původní dvouabecední šifru Leona Battisty Albertiho dokonce už z roku 1467.
    </hint>
  </example>

  <example>
    <text>
        Dostal se vám do rukou následující <a href="_txt/tajne.txt">zakódovaný text</a> zašifrovaný Vigènerovou šifrou. Navíc víte, že se jedná o český text, a to dokonce beze všech nabodeníček (tedy je v ASCII), a že jako heslo bylo použito jedno ze slov v <a href="_txt/syn2010_word.vyber-ascii.zip">tomto seznamu</a>, ale netušíte které, a že navíc zakódována byla pouze písmena (tedy interpunkce a mezery se přeskakují) a ještě jenom v jedné velikosti (tedy nerozlišuje se mezi malými a velkými písmeny). Vaším úkolem je zjistit heslo použité k zašifrování textu a text rozluštit.
        <br/>&#160;&#160;&#160;
        PS: Zdroj pro slovník <a href="http://ucnk.ff.cuni.cz/srovnani10.php" class="external">ÚČNK FF UK</a>, zdroj pro text veřejný, ale utajený ^_~
    </text>
    <hint>
        Vzhledem k počtu možností (několik set tisíc) vřele doporučuji nejdříve odladit algoritmus vyhledávání na velmi omezené podmnožině slov (třeba jen deset) a teprve po ověření jeho správnosti ho pustit na všechna.
    </hint>
  </example>


</examples>
