IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

5. diel - Ukážka jednoduchej šifrace textu Vigenerova šifra

V minulej lekcii, Pod pokrievkou šifrovacieho algoritmu RC4 , sme si ukázali algoritmus RC4, ktorý sa používa v zabezpečení WEP.

Vigenerova šifraca textu spočíva v zadanom hesle. Text sa posunie práve o toľko znakov, koľko činí v závislosti od postupnosti jednotlivé písmená v hesle v ascii hodnote. Pokiaľ napríklad zadáme 'ahoj' a ako heslo 'a' potom sa všetky písmená v slove posunú práve o jedno -> vznikne 'bipk'. Avšak ak zadáme ako heslo 'ahoj' potom to bude zaujímavejšie. Skúsime si to na nejakom odlišnom slove radšej. Napríklad 'moribundus' a heslo 'ahoj'. Ide vlastne o rovnakú metódu šifrovania ako pri Caesarovej šifri, avšak tu je pre každé písmeno v slove použité postupne každé písmenko z hesla (pokiaľ je slovo dlhšie ako heslo potom sa heslo opakuje). Názorná ukážka:

M O R Aj B U N D U S
A H O J A H O J A H
Všetky písmená sa prevedú postupne na ich asciu hodnotu a písmeno z textu sa spočíta s písmenom z hesla ktoré mu patrí.

'm' = 109 'a' = 97 (tu berieme do úvahy koľké písmeno v abecede to je) takže odpočítame 96

109 + 1 = 110 -> 'n'

Pokiaľ by sa stalo že písmenu presahuje '122' ('z') postupuje sa rovnako ako u Caesarovej šifry -> odpočítame 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 Aj B U N D U S
N W R Aj B U N D U S
N W G Aj 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 vyskúšať tu.

Ak by sme chceli Vigenerovu šifru ako algoritmus potom by to bolo v PHP nejako takto:
(odstránime medzery, dikritiku a prevedieme písmená 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 sa vykonáva rovnako akurát zameníte znamienko na druhom riadku v cykle

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

V podmienke otočíte zobáčik zmeníte 'z' na 'a' a dole prehodíte znamienko

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

 

Predchádzajúci článok
Pod pokrievkou šifrovacieho algoritmu RC4
Všetky články v sekcii
Kryptografie
Č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