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:
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 |
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);
$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);
}