3. diel - Ukážka jednoduchej šifrace textu Caesarovho šifra
V minulej lekcii, Ukážka jednoduchej šifrace textu Albertiho šifra , sme si ukázali šifru Albertiho.
Caesarova š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ú asciu hodnotu => '97' k tomuto číslu sa pripočíta zvolený posun v našom prípade '1' == '98', potom sa asciu hodnotu prevedie späť na písmeno => 'b' a postúpi sa k ďalšiemu písmenu
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 Caesarovej š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 šifrovaní pomocou 'ROT13' kde sa všetky znaky posúvajú o 13 znakov tým pádom je to šifrace aj dešifrace. V linuxoch je priamo utilita zvaná tr ktorá vám text takto zašifruje. Caesarovho šifra pokiaľ 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 |
Ak by sme chceli napísať algoritmus na túto šifru v PHP by to vyzeralo
nejako takto:
(zbavíme sa najprv 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. Avšak 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šifracia 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 ďalšej lekcii, Pod pokrievkou šifrovacieho algoritmu RC4 , si ukážeme algoritmus RC4, ktorý sa používa v zabezpečení WEP.