Афінні шифри

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

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

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

Рік:
2011
Тип роботи:
Лабораторна робота
Предмет:
Інші
Група:
ІБ-44

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

Міністерство освіти і науки України Національний університет Львівська політехніка  Звіт до лабораторної роботи № 1 на тему: “Афінні шифри” Виконав Ст. групи ІБ - 44 Перевірив Львів — 2010 Мета роботи: навчитися за допомогою афінного шифру 2-ого порядку перетворювати відкритий текст в криптотекст і навпаки. Написати програму реалізацїї даного методу шифрування та розшифрування на мові програмування С. Теоретичні відомості   Список використаних функцій, констант та змінних. alpha[] – масив в якому знаходяться букви латинського алфавіту; source[] – масив в який заноситься повідомлення; key[] – масив в який заноситься ключ; eresult[] та dresult[] – в ці масиви заносяться результати зашифрування та розшифрування у вигляді букв; digital_text[] та digital_key[] – масиви в які записується числова інтерпретація відкритого тексту та ключа, відповідно; A[], S[] – масиви в які записуються ключі в числовій інтерпретації; Ax[], Sx[] – масиви в які записуються ключі для розшифрування криптотексту; digital_eresult[] та digital_dresult[] – масиви в яких зберігаються результати зашифрування та розшифрування у вигляді їх індексів у відповідних алфавітах; i, j – змінні що використовуються в лічильниках циклів; tlen, klen – довжина повідомлення та довжина ключа відповідно; alen – довжина алфавіту; dlen – кількість стовпців в матриці, в яку записаний текст повідомлення; strlen() – визначення довжини рядка, який може бути заданий напряму або в масиві; Блок-схема програми      Код програми #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <math.h> void main() { char alfavit[]="abcdefghijklmnopqrstuvwxyz"; char slovo[2][10]={"oxk", "ykb" }; char kod[2][10]; char a1,a2,a3,a4; int k1,a11,a22,a33,a44,b1,b2,x1,s1,s2,x2,m,z1,z2,w,i,k,j; a1='b';a2='d';a3='d';a4='e';s1='b';s2='b';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(i=0;i<=25;i++) {if (s1==alfavit[i]) s1=i;} for(i=0;i<=25;i++) {if (s2==alfavit[i]) s2=i;} for(j=0;slovo[0][j]>0;j++) { k1=j;} k1=k1+1; for(j=0;j<k1;j++) {b1=slovo[0][j];b2=slovo[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;} b1=b1-s1; if (b1<0) {i=1;while (b1<0) b1=b1+i*m;i++; } else b1=b1%m; b2=b2-s2; if (b2<0) {i=1;while (b2<0) b2=b2+i*m;i++; } else b2=b2%m; 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;kod[0][j]=z1; z2=(a33*b1+a44*b2)%m;kod[1][j]=z2; } for(j=0;j<k1;j++) { for(i=0;i<=25;i++) {if (kod[0][j]==i) kod[0][j]=alfavit[i];} printf("\nvidpovid1:"); printf("%c",kod[0][j]); for(i=0;i<=25;i++) {if (kod[1][j]==i) kod[1][j]=alfavit[i];} printf("\nvidpovid2:"); printf("%c",kod[1][j]);} getch(); } #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <math.h> void main() { clrscr(); char alfavit[]="abcdefghijklmnopqrstuvwxyz"; char slovo[2][10]={"tty", "ybv" }; char kod[2][10]; char a1,a2,a3,a4,b1,b2,s1,s2,z1,z2; int j,i,x1,x2,m,k; a1='b';a2='d';a3='d';a4='e';s1='b';s2='b';m=26; 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(i=0;i<=25;i++) {if (s1==alfavit[i]) s1=i;} for(i=0;i<=25;i++) {if (s2==alfavit[i]) s2=i;} for(j=0;slovo[0][j]>0;j++) { k=j;} k=k+1; for(j=0;j<k;j++) {b1=slovo[0][j];b2=slovo[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=(a1*b1+a2*b2)+s1; x2=(a3*b1+a4*b2)+s2; z1=x1%m; kod[0][j]=z1; z2=x2%m; kod[1][j]=z2; } for(j=0;j<k;j++) { for(i=0;i<=25;i++) {if (kod[0][j]==i) kod[0][j]=alfavit[i];} printf("\nvidpovid1:"); printf("%c",kod[0][j]); for(i=0;i<=25;i++) {if (kod[1][j]==i) kod[1][j]=alfavit[i];} printf("\nvidpovid2:"); printf("%c",kod[1][j]);} getch(); } Висновок В даній лабораторній роботі я вивчив і реалізував алгоритм кодування та розкодування афінним шифром 2-ого порядку. Нескладно зауважити, що афінний шифр не стійкий до атаки з вибором відкритого тексту. Суперникові достатньо довідатись, в які криптотексти переходять відповідні к-грами за вибраним вектором, що дозволяю повністю визначити ключ.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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