Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Лабораторна робота № 2
з дисципліни “Криптографічні системи та протоколи”
на тему:
“Афінні шифри ”
Мета роботи: вивчитити метод шифрування тексту з допомогою афінних перетворень.
1. Завдання.
Реалізувати програму, що дозволяє шифрувати інформацію з використанням афінних перетворень
2. Фрагменти тексту програми.
кодування даних
…
int A[maxN][maxN], S[maxN];
for(int i=0;i<countSpin->Value;i++)
{ for(int j=0;j<countSpin->Value;j++) A[i][j]=StrToInt(keyA->Cells[j][i]);
S[i]=StrToInt(keyS->Cells[0][i]); }
int w=det(&A[0][0],countSpin->Value)%256;
if (w<0) w+=256; int w_1, d=0; RAE(256,w,d,w_1);
if(d!=1) { ShowMessage("Ключ не коректний\n(матриця А - не оборотна)"); }
else { AnsiString text=placeText->Text;
if(text.Length()%countSpin->Value!=0)
{ int m=countSpin->Value-text.Length()%countSpin->Value;
for(int i=0;i<m;i++)
text+=' '; }
crypt(text,&A[0][0],&S[0]); placeText->Text=text; }
…
декодування даних
…
int A[maxN][maxN], S[maxN];int A_1[maxN][maxN], S_1[maxN];
for(int i=0;i<countSpin->Value;i++)
{ for(int j=0;j<countSpin->Value;j++) A[i][j]=StrToInt(keyA->Cells[j][i]);
S[i]=StrToInt(keyS->Cells[0][i]); }
int w=det(&A[0][0],countSpin->Value)%256; if (w<0) w+=256; int w_1, d=0; exEuclid(w, 256, &w_1, &d);
w_1%=256; if (w_1<0) w_1+=256;
if(d!=1) { ShowMessage("Ключ не коректний\n(матриця А - не оборотна)"); }
else {
for(int i=0;i<countSpin->Value;i++)
for(int j=0;j<countSpin->Value;j++)
{ int addA_1[maxN][maxN]; int ii=0, jj=0, ai=0, aj=0;
while(ii<countSpin->Value-1)
{ if(ai==i) { ai++; continue; }
while(jj<countSpin->Value-1)
{ if(aj==j) { aj++; continue; }
addA_1[ii][jj]=A[ai][aj]; aj++; jj++; }
ai++; ii++; aj=0; jj=0; }
A_1[j][i]=pow(-1,i+j)*det(&addA_1[0][0],countSpin->Value-1)*w_1;
A_1[j][i]%=256; if (A_1[j][i]<0) A_1[j][i]+=256; }
for(int i=0;i<countSpin->Value;i++)
{ S_1[i]=0;
for(int j=0;j<countSpin->Value;j++) S_1[i]+=A_1[i][j]*S[j];
S_1[i]*=-1; S[i]%=256; if (S[i]<0) S[i]+=256; }
AnsiString text=placeText->Text; crypt(text,&A_1[0][0],&S_1[0]);
for(int i=text.Length();i>0;i--) if(text[i]==' ') text=text.SubString(1,text.Length()-1); placeText->Text=text; }
…
5. Результати роботи
Рисунок 1 – Шифрування даних з використанням Афінних перетворень
Висновок: На даній лабораторній роботі було засвоєно та реалізовано шифрування текстової інформації з використанням афінних претворень.