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 Albertiho šifra

Princíp Albertiho šifry spočíva v šifrovanie textu pomocou 2 šifrovaných abecied. Teda nepárne pozície znakov sa zašifrujú pomocou prvý abecedy a párne 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:

ABCDEFGHIJKLMNOP­QRSTU VWXYZ

K tomu prvej šifrovanú abecedu:

COYQGWMZPBITNJHKSDEFR UVLX A

Plus ešte druhú šifrovanú abecedu:

AXLVURFEDSKHJNTIB­PZMW GQYO C

Slovo "ahoj" si rozdelíme na jednotlivé znaky a tie na párne a nepárne:

AHOJ

  • A - nepárne - prvá abeceda
  • H - párne - druhá abeceda
  • O - nepárne - prvá abeceda
  • J - párne - druhá abeceda

Teraz prejdeme znak po znaku a podľa nepárne či párne pozície určíme, ktorú šifrovanú abecedu na znak použijeme. Znak vyhľadáme v klasickej abecede a n-tú pozíciu v tejto abecede vyberieme v určenej šifrovanej abecede. Tento zašifrovaný znak potom zodpovedá znaku v texte, ktoré chceme zašifrovať. Takto prejdeme celý text.

- A -> prvý v klasickej abecede, to zodpovedá prvému znaku v prvej šifrovanej abecede, teda znaku C
  • H -> ôsmej 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 -> desiatej v klasickej abecede, desiaty znak v druhej š. Abecede, znak S

Algoritmus tejto šifry v C# .NET môže vyzerať nejako takto:

(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šifraci:

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())];
    }
}

A


 

Aktivity