2. diel - Ukážka jednoduchej šifrace textu Albertiho šifra
V minulej lekcii, Úvod do šifrovanie a blokové šifry , sme si uviedli pojem blokové šifry a spôsob, ako túto konštrukciu využiť pre ochranu tajomstva malého rozsahu.
Princíp Albertiho šifry spočíva v šifrovaní textu pomocou 2 šifrovaných abecied. Nepárne pozície znakov sa teda zašifrujú pomocou prvej abecedy a párnej pozície znakov pomocou druhej abecedy. Šifrované abecedy môžu byť samozrejme ľubovoľné. Šifru si môžeme predviesť na slove „ahoj“.
Vytvoríme si klasickú abecedu:
ABCDEFGHIJKLMNOPQRSTU VWXYZ
K tomu prvú šifrovanú abecedu:
COYQGWMZPBITNJHKSDEFR UVLX A
Plus ešte druhú šifrovanú abecedu:
AXLVURFEDSKHJNTIBPZMW GQYO C
Slovo "ahoj" si rozdelíme na jednotlivé znaky a tie na nepárne a párne:
AHOJ
- A - nepárne - prvá abeceda
- H - párne - druhá abeceda
- O - nepárne - prvá abeceda
- J - párne - druhá abeceda
A
- A -> prvá v klasickej abecede, to zodpovedá prvému znaku v prvej šifrovanej abecede, teda znaku C
- H -> ôsmy v klasickej abecede, to zodpovedá ôsmemu znaku v druhej š. abecede, teda E
- O -> pätnástej v klasickej abecede, teda pätnásty znak v prvej š. abecede, znak H
- J -> desiate v klasickej abecede, desiaty znak v druhej š. abecede, znak S
(Definujeme abecedy, prejdeme text po znakoch a do premennej šifra priradíme hodnotu z šifrovaných abecied)
string[] abeceda = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", " " }; string[] p = { "C", "O", "Y", "Q", "G", "W", "M", "Z", "P", "B", "I", "T", "N", "J", "H", "K", "S", "D", "E", "F", "R", "U", "V", "L", "X", "A", " " }; string[] d = { "A", "X", "L", "V", "U", "R", "F", "E", "D", "S", "K", "H", "J", "N", "T", "I", "B", "P", "Z", "M", "W", "G", "Q", "Y", "O", "C", " " }; string sifra = ""; for (int i = 1; i <= text.Length; i++) { string pismeno = text[i-1].ToString(); if (i % 2 == 0) sifra += d[Array.IndexOf(abeceda, (pismeno.ToString()).ToUpper())]; else sifra += p[Array.IndexOf(abeceda, (pismeno.ToString()).ToUpper())]; }
A pre dešifráciu:
string[] abeceda = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", " " }; string[] p = { "C", "O", "Y", "Q", "G", "W", "M", "Z", "P", "B", "I", "T", "N", "J", "H", "K", "S", "D", "E", "F", "R", "U", "V", "L", "X", "A", " " }; string[] d = { "A", "X", "L", "V", "U", "R", "F", "E", "D", "S", "K", "H", "J", "N", "T", "I", "B", "P", "Z", "M", "W", "G", "Q", "Y", "O", "C", " " }; string puvodniText = ""; for (int i = 1; i <= sifra.Length; i++) { string pismeno = sifra[i - 1].ToString(); if (i % 2 == 0) { puvodniText += abeceda[Array.IndexOf(d, (pismeno.ToString()).ToUpper())]; } else { puvodniText += abeceda[Array.IndexOf(p, (pismeno.ToString()).ToUpper())]; } }
V ďalšej lekcii, Ukážka jednoduchej šifrace textu Caesarovho šifra , si ukážeme Caesarovu šifru.