Documente Academic
Documente Profesional
Documente Cultură
LABORATOR 4
Sistemul de criptare afin
Proprieti:
1) Condiia ca a s fie prim cu 26 asigur existena lui a-1 n Z26.
2) Orice cheie k K , K fiind spaiul cheilor, este determinat complet de valorile ntregi (a,b)
cu (a,26)=1. Sunt posibile 12 valori pentru a: 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25. Pentru
b sunt posibile 26 de valori, care se iau independent de a, cu singura excepia a=1, b=0
(care se exclude deoarece nu conduce la nicio criptare).
3) Deci card(K)=311, numr suficient de mic pentru reuita unui atac prin for brut.
4) Condiia cmmdc(a,26)=1 asigur injectivitatea aplicaiei ek. De exemplu, pentru
ek ( x) 10 x 1 , A i N se transform ambele n B, iar O nu apare ca imagine n alfabetul
substituiei.
Exemplu:
CRIPTAREA: pentru a=3, b=5 funcia de criptare este ek ( x ) 3x 5 , care poate fi reprezentat prin
tabelul:
apte
textBoxuri
(textBoxA,
textBoxB,
textBoxFctCript,
i dou butoane
(buttonCript i buttonCancel).
Controlul buttonCrip are setat proprietatea DialogResult pe valoarea OK, iar controlul
buttonCancel are setat proprietatea DialogResult pe valoarea Cancel. Valoarea ntoars de aceast
proprietate este folosit de algoritmul de criptare pentru a decide dac efectueaz sau nu criptarea
textului clar.
n clasa DateCezar, clas existent n proiect, sunt adugate trei atribute pentru a memora
irurile de caractere generate de funcia de criptare i de funcia de decriptare.
//pentru sistemul afin
public static char[] textclar = new char[26];
public static char[] criptare = new char[26];
public static char[] decriptare = new char[26];
if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(),
"\\d+"))
e.Handled = true;
Evenimentele click ale celor dou butoane de comand nchid fereastra curent i determin
ntoarcerea n fereastra principal a proiectului. Butonul de criptare face i o verificare a existenei
inversului pentru coeficientul A.
private void buttonCancel_Click(object sender, EventArgs e)
{
this.Close();
}
private void buttonCript_Click(object sender, EventArgs e)
{
//verificam daca numarul A are invers pentru decriptare
if (cmmdc(textBoxA.Text) != 1)
MessageBox.Show("Nu exista invers pentru numarul A (cmmdc(A,26)=1)");
else
this.Close();
}
}
}
}
private void textBoxB_TextChanged(object sender, EventArgs e)
{
if (textBoxA.Text != "")
{
//convertim cheia in valori numerice
int x = Convert.ToInt32(textBoxA.Text);
int y = Convert.ToInt32(textBoxB.Text);
//afisam functia de criptare
textBoxFctCript.Text = "e(k)=" + textBoxA.Text + "x+" + textBoxB.Text;
//calculam inversul lui A
int a_1 = invers(x);
if (a_1 != 0)
{
//calculam a^(-1)(26-b)(mod 26)
int b_1 = (a_1 * (26 - y)) % 26;
//Afisam functia de decriptare
textBoxFctDecript.Text = "d(k)=" + a_1.ToString() + "y+" +
b_1.ToString();
textBoxClar.Text = "";
textBoxCritpare.Text = "";
textBoxDecriptare.Text = "";
for (int i = 0; i < 26; i++)
{
//Aplicam functia de criptare
DateCezar.criptare[i] = DateCezar.textclar[(i * x + y) % 26];
//Aplicam functia de decriptare
DateCezar.decriptare[i] = DateCezar.textclar[(i * a_1 + b_1) % 26];
//Afisam datele obtinute pentru criptare si decriptare
textBoxClar.Text += DateCezar.textclar[i] + " ";
textBoxCritpare.Text += DateCezar.criptare[i] + " ";
textBoxDecriptare.Text += DateCezar.decriptare[i] + " ";
}
}
}
}
n fereastra principal, n meniu, se introduc dou opiuni noi, folosite pentru declanarea
criptrii, respectiv decriptrii.
else