Афінні шифри. Лінійний шифр 2-го порядку

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2010
Тип роботи:
Лабораторна робота
Предмет:
Методи та засоби криптологічних перетворень
Група:
ІБ – 44

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Кафедра ЗІ  Лабороторна робота №2 з курсу «Методи і засоби криптологічних перетворень» на тему: «Афінні шифри. Лінійний шифр 2-го порядку» Мета роботи: ознайомитися з афінними шифрами (шифр зсуву, лінійний шифр, афінний шифр 1-го і вищих порядків). Завдання: Написати програму шифрування та розшифрування на мові програмування С/С++ для реалізації лінійного шифру 2-го порядку. Короткі теоретичні відомості Позначимо через Mk(Zn) множину матриць розміру k×k з коефіцієнтом з кільця Zn. Через Gl(Zn) позначимо підмножину оборотніх матриць. Для деякої матриці А  Gl(Zn) обернену до неї матрицю позначимо . Добутком А*Х матриці А={}, А  Mk(Zn), на вектор-стовпчик Х   є вектор-стовпчик  * =  Ключ: А  Glk(Zn), НСД (w, n)=1, де w – визначник матриці. Зашифрування: відкритий текст розбивається на k-грами, кожна k-грама Х зашифровується k-грамою У, при чому У=(А*Х)mod n. Розшифрування: У→Х, Х=А’*У, А’=  - ключ розшифрування. Розглянемо це детальніше на прикладі: k=2, тобто біграмний лінійний шифр. Нехай необхідно зашифрувати біг раму кл з ключем А=. Біграмі кл в українській мові відповідають числа 14 15. Отже за шифрування здійснюється так: * =  = . В результаті за шифрування ми отримали біг раму іг. Матриця А – оборотна, тому що НСД (w, n)=(31,33)=1. Процес розшифрування здійснюється наступним чином. Потрібно знайти ключ дешифрування =, де  – обернений елемент, який знайдемо за алгоритмом Евкліда: 33=1*31+2 31=15*2+1 2=2*1+0 1=1*31+(-15)*2=1*31+(-15)*(33-1*31)=-15*33++16*31 16*31≡1(mod 33) =16 – обернений елемент Отже,  =  =  *= =  В результаті розшифрування біграми іг ми отримали початкову біграму кл. Текст програми шифрування #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <math.h> void main() { clrscr(); char alfavit[]="abcdefghijklmnopqrstuvwxyz"; char opentext[2][15]={"sgdiakaovttoc", "oonysrvsiysne" }; char shyfr[2][15]; char a1,a2,a3,a4,b1,b2; int a11,a22,a33,a44,x1,x2,m,z1,z2,k,j,i; a1='b';a2='d';a3='d';a4='e';m=26; for(i=0;i<=25;i++) {if (a1==alfavit[i]) a11=i;} for(i=0;i<=25;i++) {if (a2==alfavit[i]) a22=i;} for(i=0;i<=25;i++) {if (a3==alfavit[i]) a33=i;} for(i=0;i<=25;i++) {if (a4==alfavit[i]) a44=i;} for(j=0;opentext[0][j]>0;j++) { k=j;} k=k+1; for(j=0;j<k;j++) {b1=opentext[0][j]; b2=opentext[1][j]; for(i=0;i<=25;i++) {if (b1==alfavit[i]) b1=i;} for(i=0;i<=25;i++) {if (b2==alfavit[i]) b2=i;} x1=0;x2=0;z1=0;z2=0; x1=a11*b1+a22*b2; x2=a33*b1+a44*b2; z1=x1%m; shyfr[0][j]=z1; z2=x2%m; shyfr[1][j]=z2; } for(j=0;j<k;j++) { for(i=0;i<=25;i++) {if (shyfr[0][j]==i) shyfr[0][j]=alfavit[i];} printf(«%c»,shyfr[0][j]); for(i=0;i<=25;i++) {if (shyfr[1][j]==i) shyfr[1][j]=alfavit[i];} printf(«%c»,shyfr[1][j]);} getch(); } Результат виконання програми Блок-схема алгоритму програми шифрування - + - + - + - + - + - + - + Текст програми розшифрування #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <math.h> void main() { clrscr(); char alfavit[]="abcdefghijklmnopqrstuvwxyz"; char shyfr[2][15]={"iwqccjlqtnvbo", "gwjquugkrxzqw" }; char rozshyfr[2][15]; char a1,a2,a3,a4; int k1,a11,a22,a33,a44,b1,b2,x1,x2,m,z1,z2,w,i,k,j; a1='b';a2='d';a3='d';a4='e';m=26; k=0;a11=0;a22=0;a33=0;a44=0; z1=0;z2=0; for(i=0;i<=25;i++) {if (a1==alfavit[i]) a1=i;} for(i=0;i<=25;i++) {if (a2==alfavit[i]) a2=i;} for(i=0;i<=25;i++) {if (a3==alfavit[i]) a3=i;} for(i=0;i<=25;i++) {if (a4==alfavit[i]) a4=i;} for(j=0;shyfr[0][j]>0;j++) { k1=j;} k1=k1+1; for(j=0;j<k1;j++) {b1=shyfr[0][j];b2=shyfr[1][j]; for(i=0;i<=25;i++) {if (b1==alfavit[i]) b1=i;} for(i=0;i<=25;i++) {if (b2==alfavit[i]) b2=i;} w=a1*a4-a2*a3; if (w<0) {i=1;while (w<0) w=w+i*m;i++; } else w=w%m; for(i=0;i<=m;i++) { if (1==w*i%m) {k=i;break;} else k=0;} a11=(a4*k)%m; a22=-(a2*k);{ i=1; while (a22<=0) a22=a22+i*m;i++;} a33=-(a3*k); { i=1; while (a33<=0) a33=a33+i*m;i++;} a44=(a1*k)%m; z1=(a11*b1+a22*b2)%m;rozshyfr[0][j]=z1; z2=(a33*b1+a44*b2)%m;rozshyfr[1][j]=z2; } for(j=0;j<k1;j++) { for(i=0;i<=25;i++) {if (rozshyfr[0][j]==i) rozshyfr [0][j]=alfavit[i];} printf("%c",rozshyfr[0][j]); for(i=0;i<=25;i++) {if (rozshyfr[1][j]==i) rozshyfr[1][j]=alfavit[i];} printf("%c",rozshyfr[1][j]);} getch(); } Результат виконання програми розшифрування  Блок-схема алгоритму програми розшифрування - + - + - + - + - + - + м - + - + - + + + - + - + Висновки: у даній лабораторній роботі я реалізувала програми шифрування і розшифрування повідомлення за допомогою лінійного шифру 2-го порядку. Лінійний шифр є вразливим до атаки з відомим відкритим текстом, до атаки лише за крипто текстом цей шифр є стійкішим, тому що є великим простір ключів. Чим вищий порядок шифру тим більший час криптування і декриптування.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!