Lekce 3 - Ukázka jednoduché šifrace textu Caesarova šifra
V minulé lekci, Ukázka jednoduché šifrace textu Albertiho šifra, jsme si ukázali šifru Albertiho.
Caesarova šifrace textu spočívá v posunu každého znaku v zadaném slově právě o zadaný číselný počet. Pokud například zadáte slovo 'ahoj' a zvolíte posun o jeden znak. Pak se s tímto slovem stane postupně toto:
'a' se převede na číselnou ascii hodnotu => '97' k tomuto číslu se přičte zvolený posun v našem případě '1' == '98', poté se ascii hodnota převede zpět na písmeno => 'b' a postoupí se k dalšímu písmenu
Pokud bychom chtěli například posunout 'z' o 4 místa tak si můžete všimnout že v ascii tabulce je '~' jenže v Caesarově šifře je posun přes 'z' na 'a' takže by nám mělo vyjít 'e', proto když je rozsah větší jak 122 ('z') tak se od výsledku odečte 25 (počet písmen v anglické abecedě je 26 a právě s jedním písmenem operujeme proto ho nezapočítáváme) Toho se také využívá v šifrování pomocí 'ROT13' kde se všechny znaky posouvají o 13 znaků tím pádem je to šifrace i dešifrace. V linuxech je přímo utilita zvaná tr která vám text takto zašifruje. Caesarova šifra pokud zvolíte posun o 13 znaků takto samozřejmě také funguje.
A | H | O | J |
B | H | O | J |
B | I | O | J |
B | I | P | J |
B | I | P | K |
Zde si můžete vyzkoušet Caesarovu šifru v praxi.
Poku bychom chtěli napsat algoritmus na tuto šifru v PHP by to vypadalo
nějak takhle:
(zbavíme se prvně diakritiky a text převedeme na malé písmena -> iconv,
strtolower)
for($i=0;$i<strlen($text);$i++) $text[$i] = chr(ord($text[$i]) + $posun);
Krásné dva řádky kódu. Ovšem je tu problém co když tam napíšu 'z' a dám posun o 4 já nechci přece '~' já chci 'e'
Musíme náš kód rozšířit o další dva řádky
if (ord($text[$i]) > ord('z')) { $thumb = ord('z') - ord('a') + 1; $text[$i] = chr(ord($text[$i]) - $thumb); }
Pozn.: Dešifrace probíha obdobně akorát změníte v cyklu znaménko na '-', v podmínce otočíte zobáček a přepíšete 'z' na 'a' a $thumb budeme teď přičítat
if (ord($text[$i]) < ord('a')) { $thumb = ord('z') - ord('a') + 1; $text[$i] = chr(ord($text[$i]) + $thumb); }
V další lekci, Pod pokličkou šifrovacího algoritmu RC4, si ukážeme algoritmus RC4, který se používá v zabezpečení WEP.