using System;
public class Program
{
static string CezarovaSifra(string s, int pos)
int i;
string ns = "";
int pom;
for (i = 0; i < s.Length; i++)
pom = (int)s[i] + pos;
ns = ns + (char)pom;
}
return ns;
/* V roli utocnika na taktoy zasifrovany text by stacilo spustit tuto fci v cyklu
* v rozsahu danem pouzitou znakovou sadou, resp. velikosti mnoziny moznych znaku.
* V pripade predpokladu pouzite ASCII by byla tato mnozina relativne mala a rozsah
* cyklu by byl maly take, takze by bylo i celkem jednoduche vizualne zkontrolovat,
* ktery cyklus desifroval.
* V pripade Unicode se nam mozny pocet kombinaci zvysuje, takze "opticka" kontrola
* je jiz nerealna. Vysledky by se vysiltorvali podle struktury vysledneho textu.
* pokud by neprevazovali "citelne" znaky, da se predpokladat, ze vysledek je spatny.
* Z prvniho filtrovani by nam tedy zbyly jen ty fraze, kde prevazuji pismena, cislice,
* interpunkce, symboly a bile znaky nad znaky ridicimi.
* Dalsi filtr by se dal aplikovat na zaklade jazyku, ve kterem predpokladame puvodni zpravu.
* Tim by nam vypadly vsechny exoticke znakove sady.
* A zbytek by se v zavislosti na mnozstvi dal budto opet resit "opticky", nebo nasadit nejake
* sofitikovanejsi reseni - vyrazeni tech vysledku, kde jsou nesmyslne sekvence znaku
* (např. 4 souhlasky/samohlasky za sebou se bezne nevyskytuji)
* Dale by se dalo porovnavat pocet vyskytu jednotlivych znaku v desifrovanem textu s beznym
* vyskytem znaku v jazyce (ale k tomu uz jsou potreba nejaka vstupni data, ktera ale
* kryptografove urcite maji)
* Pripadne si urcit mnozinu nejpravdepodobnejsich retezcu, ktere by se v textu mohly objevovat
* a s temi to slovy porovnavat desifrovany text.
*/
public static void Main()
string s1 = "Alena ma 2 ruce.";
string s5 = CezarovaSifra(s1,20);
string s6 = CezarovaSifra(s5, -20);
Console.WriteLine(s5);
Console.WriteLine(s6);
Console.ReadLine();