IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Ukážka jednoduché šifrace texte cézarova šifra

Caesarovho šifrace textu spočíva v posune každého znaku v zadanom slove práve o zadaný číselný počet. Ak napríklad zadáte slovo 'ahoj' a zvolíte posun o jeden znak. Potom sa s týmto slovom stane postupne toto:

'A' sa prevedie na číselnú ascii hodnotu => '97' k tomuto číslu sa pripočíta zvolený posun v našom prípade '1' == '98', potom sa ascii hodnota prevedie späť na písmeno => 'b' a postúpi sa k ďalšiemu písmene

Ak by sme chceli napríklad posunúť 'z' o 4 miesta tak si môžete všimnúť že v ascii tabuľke je '~' lenže v Cézarovej šifre je posun cez 'z' na 'a' takže by nám malo vyjsť 'e', preto keď je rozsah väčší ako 122 ( 'z') tak sa od výsledku odpočíta 25 (počet písmen v anglickej abecede je 26 a práve s jedným písmenom operujeme preto ho nezapočítavame) Toho sa tiež využíva v šifrovanie pomocou 'ROT13' kde sa všetky znaky posúvajú o 13 znakov tým pádom je to šifrace aj dešifrace. V Linuxe je priamo utilita zvaná tr ktorá vám text takto zašifruje. Cézarova šifra ak zvolíte posun o 13 znakov takto samozrejme tiež funguje.

A H O J
B H O J
B Aj O J
B Aj P J
B Aj P K
Tu si môžete vyskúšať Caesarovu šifru v praxi.

Poku by sme chceli napísať algoritmus na túto šifru v PHP by to vyzeralo asi takto:
(Zbavíme sa prvýkrát diakritiky a text prevedieme na malé písmená -> iconv, strtolower)

for($i=0;$i<strlen($text);$i++)
    $text[$i] = chr(ord($text[$i]) + $posun);

Krásne dva riadky kódu. Ovšem je tu problém čo keď tam napíšem 'z' a dám posun o 4 ja nechcem predsa '~' ja chcem 'e'

Musíme náš kód rozšíriť o ďalšie dva riadky

if (ord($text[$i]) > ord('z')) {
    $thumb = ord('z') - ord('a') + 1;
    $text[$i] = chr(ord($text[$i]) - $thumb);
}

Pozn .: Dešifrace prebieha obdobne akurát zmeníte v cykle znamienko na '-', v podmienke otočíte zobáčik a prepíšete 'z' na 'a' a $ thumb budeme teraz pričítať

if (ord($text[$i]) < ord('a')) {
    $thumb = ord('z') - ord('a') + 1;
    $text[$i] = chr(ord($text[$i]) + $thumb);
}

 

Všetky články v sekcii
Ostatné algoritmy
Článok pre vás napísal David Jančík
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity