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í.

Ukážka jednoduché šifrace texte Vigenerova šifra

Vigenerova šifrace textu spočíva v zadanom hesle. Text sa posunie práve o toľko znakov, koľko činí v závislosti na postupnosti jednotlivé písmená v hesle v ascii hodnote. Ak 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 u Caesarove šifry avšak tu je pre každé písmeno v slove použité postupne každé písmenko z hesla (ak je slovo dlhší 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 ascii hodnotu a písmeno z textu sa sčíta s písmenom z hesla ktoré mu patria.

'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'

Ak by sa stalo že písmene presahuje '122' ( 'z') postupuje sa rovnako ako u Caesarovi š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);
}

 

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