Úloha 28: Šifra had (spirálová matice)
Cíl úlohy
Vytvořte transpoziční šifrovací algoritmus Had. Text se zbaví mezer a zalomení řádků a zapíše se do čtvercové matice o rozměrech po spirále směrem od vnějšího okraje ke středu (doprava → dolů → doleva → nahoru). Zbývající volná políčka se vyplní náhodnými písmeny. Šifrovaný text vznikne čtením matice po řádcích.
Určení minimálního čtverce a hranice matice
- Rozměr matice: Pokud má zpráva znaků, hledáme nejmenší celé číslo takové, že , tedy .
- Řízení okrajů (Borders): Spirálový pohyb udržuje 4 hranice:
- Pohyb doprava po horním okraji, následně horní okraj posuneme o 1 dolů (
$horniOkraj++). - Pohyb dolů po pravém okraji, následně pravý okraj posuneme o 1 doleva (
$pravyOkraj--). - Pohyb doleva po dolním okraji, následně dolní okraj posuneme o 1 nahoru (
$dolniOkraj--). - Pohyb nahoru po levém okraji, následně levý okraj posuneme o 1 doprava (
$levyOkraj++).
- Pohyb doprava po horním okraji, následně horní okraj posuneme o 1 dolů (
Úvahy a doporučený postup řešení
- Rozdělení UTF-8 řetězce: Pro české znaky použijte multibyte bezpečné rozdělení (např.
mb_str_split()nebo regulární výrazpreg_split('//u', $text, -1, PREG_SPLIT_NO_EMPTY)). - Zarážka konce textu: Aby příjemce poznal, kde končí původní zpráva a kde začíná náhodná výplň, za poslední znak původního textu vložíme hvězdičku
*.
Doplňující otázky k zamyšlení a náměty na rozšíření
- 1. Jak by fungoval reverzní dešifrovací algoritmus pro přečtení původní zprávy?
- 2. Jaké další geometrické trasy zápisu do matice se v kryptografii historicky používaly (např. šachovnice, cik-cak / rail fence šifra)?
Vyzkoušejte funkční řešení: Otevřít vzorovou úlohu had.php