Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

Lekce 5 - Ukázka jednoduché šifrace textu Vigenerova šifra

V minulé lekci, Pod pokličkou šifrovacího algoritmu RC4, jsme si ukázali algoritmus RC4, který se používá v zabezpečení WEP.

Vigenerova šifrace textu spočívá v zadaném hesle. Text se posune právě o tolik znaků, kolik činí v závislosti na posloupnosti jednotlivá písmena v hesle v ascii hodnotě. Pokud například zadáme 'ahoj' a jako heslo 'a' pak se všechna písmena ve slově posunou právě o jedno -> vznikne 'bipk'. Avšak pokud zadáme jako heslo 'ahoj' pak to bude zajímavější. Zkusíme si to na nějakém odlišném slově raději. Například 'moribundus' a heslo 'ahoj'. Jde vlastně o stejnou metodu šifrování jako u Caesarovy šifry avšak zde je pro každé písmeno ve slově použito postupně každé písmenko z hesla (pokud je slovo delší než heslo pak se heslo opakuje). Názorná ukázka:

M O R I B U N D U S
A H O J A H O J A H

Všechny písmena se převedou postupně na jejich ascii hodnotu a písmeno z textu se sečte s písmenem z hesla které mu náleží.

'm' = 109 'a' = 97 (zde bereme v potaz kolikáté písmeno v abecedě to je) takže odečteme 96

109 + 1 = 110 -> 'n'

Pokud by se stalo že písmenu přesahuje '122' ('z') postupuje se stejně jako u Caesarovi šifry -> odečteme od výsledku 25

109 111 114 105 98 117 110 100 117 115
1 8 15 10 1 8 15 10 1 8

 

N O R I B U N D U S
N W R I B U N D U S
N W G I B U N D U S
N W G S B U N D U S
N W G S C U N D U S
N W G S C C N D U S
N W G S C C C D U S
N W G S C C C N U S
N W G S C C C N V S
N W G S C C C N V A

Vigenerovu šifru si můžete v praxi vyzkoušet zde.

Pokud bychom chtěli Vigenerovu šifru jako algoritmus pak by to bylo v PHP nějak takto:
(odstraníme mezery, dikritiku a převedeme písmena na malá -> str_repalce, iconv, strtolower)

for($i=0; $i < strlen($text); $i++)
{
    $x = ord($passwd[$i % strlen($passwd)]) - (ord('a') - 1); // shift
    $text[$i] = chr(ord($text[$i]) + $x);
    if (ord($text[$i]) > ord('z')) {
        $x = ord('z') - ord('a') + 1;
        $text[$i] = chr(ord($text[$i]) - $x);
    }
}

Dešifrace se provádí stejně akorát zaměníte znaménko na druhém řádku v cyklu

$text[$i] = chr(ord($text[$i]) - $x);

V podmínce otočíte zobáček změníte 'z' na 'a' a dole přehodíte znaménko

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

 

Předchozí článek
Pod pokličkou šifrovacího algoritmu RC4
Všechny články v sekci
Kryptografie
Článek pro vás napsal David Jančík
Avatar
Uživatelské hodnocení:
22 hlasů
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity