Шифри Афінний і RSA.

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

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

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

Рік:
2025
Тип роботи:
Курсова робота
Предмет:
Інші

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

      Завдання 1. Симетричне шифрування Вибрати ключі та розробити програму для зашифрування файлу даних заданим афінним шифром. Тип афінного шифру визначається останньою цифрою і НЗК (Таблиця 1). Об'єм алфавіту NА визначається передостанньою цифрою j НЗК і дорівнює 2(5+і) при j ≠ 3 і 215 при j = 3. Номер залікової книжки 90085 Отже тип афінного шифру - 5 mod6=5 (афінний 3-го порядку) Об’єм алфавіту 2(13) Програма шифрування #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #include <math.h> const size_t small_buff = 20; const size_t big_buff = 102400; void main() { clrscr(); char text[small_buff]; char bigtext[big_buff]; FILE *infile = fopen( "f:\\cc.txt", "r" ); /*відкриваєм файл*/ size_t read_len = 0; size_t file_len = 0; while( read_len = fread(text, 1, small_buff, infile ) ) /*знаходимо довжину файлу*/ { memcpy( bigtext + file_len, text, read_len ); file_len += read_len; } int j,a3,a1,a2,i; int klych1[]={1,1,1,0,0,1,1,1,1,0,0,0,0}; /*задаємо значення ключів і зсувів*/ int klych2[]={0,1,1,0,0,1,1,1,1,0,0,0,0}; int klych3[]={0,1,1,0,0,1,1,0,1,0,0,0,0}; int zsyv1[]={0,1,1,0,0,1,1,1,1,0,0,0,0}; int zsyv2[]={0,1,1,0,0,1,1,1,1,0,0,0,0}; int zsyv3[]={0,1,1,0,0,1,1,1,1,0,0,0,0}; int kk,b1,b2,b3,k[13]; char zyb1; kk=pow(2,13); for(i=0;i<13;i++) /*очищуєм масив*/ {k[i]=0;} for(i=0;i<13;i++) /*знаходимо значення ключа 1-го*/ {{ if (1==klych1[i]) k[i]=pow(2,i); else k[i]=0;} a1=a1+k[i];} for(i=0;i<13;i++) /*знаходимо значення зсуву 1-го*/ {{ if (1==zsyv1[i]) k[i]=pow(2,i); else k[i]=0;} b1=b1+k[i];} for(i=0;i<13;i++) /*знаходимо значення ключа 2-го*/ {{ if (1==klych2[i]) k[i]=pow(2,i); else k[i]=0;} a2=a2+k[i];} for(i=0;i<13;i++) /*знаходимо значення зсуву 2-го*/ {{ if (1==zsyv2[i]) k[i]=pow(2,i); else k[i]=0;} b2=b2+k[i];} for(i=0;i<13;i++) /*знаходимо значення ключа 3-го*/ {{ if (1==klych3[i]) k[i]=pow(2,i); else k[i]=0;} a3=a3+k[i];} for(i=0;i<13;i++) /*знаходимо значення зсуву 3-го*/ {{ if (1==zsyv3[i]) k[i]=pow(2,i); else k[i]=0;} b3=b3+k[i];} kk=pow(2,13); for(j=0;j<file_len-3;j=j+3) /*шифровуєм текст*/ { bigtext[j]=bigtext[j]*a1+ bigtext[j+3]*a2+ bigtext[j+6]*a3+b1; bigtext[j]=bigtext[j]%kk; bigtext[1+j]=bigtext[1+j]*a1+ bigtext[1+j+3]*a2+ bigtext[1+j+3+3]*a3+b2; bigtext[1+j]=bigtext[1+j]%kk; bigtext[2+j]=bigtext[2+j]*a1+ bigtext[2+j+3]*a2+ bigtext[2+j+3+3]*a3+b3; bigtext[2+j]=bigtext[2+j]%kk; } FILE *outfile = fopen( "f:\\resul.txt", "w" ); /*створюєм файл з шифртекстом*/ fwrite( bigtext, 1, file_len, outfile ); /*записуєм шифр текст в файл*/ fclose( infile ); fclose( outfile ); } текст повідомлення: текст для за шифрування крипто текст: ецйшкечрст.бзчздччзфщяч Блок схема програми  а) Зашифрувати Слово відкритого тексту за алгоритмом RSA. Слово визначається останньою буквою і НЗК і задане в Таблиці 2. Для генерування ключів використати числа р та q, які визначаються передостанньою цифрою j НЗК і задані в Таблиці 3. Букви тексту замінити натуральними числами, що відповідають порядковому номеру букви в українському алфавіті. Наприклад А=00, Б=01, В=02 і т.д. отже і=5 тоді потрібно зашифрувати слово (хід) де Р=7 ,а Ч=17 n=p*q=7*13=91 f(n)=n-p-q+1=91-7-13+1=72 e=3 d=19 шифрування слова д=25,в=11,а=05 25^3mod91=64 11^3mod91=57 05^3mod91=34 зашифрований текст: 64 57 34 б) Скласти програму зашифрування файлу за алгоритмом RSA. Об'єм алфавіту кодування - na . Величина блоку - 4 ]og2 NA [. Величина блоку =16 об’єм алфавіту=13 ТЕОРИТИЧНІ ВІДОМОСТІ   Програма шифрування #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #include <math.h> const size_t small_buff = 20; const size_t big_buff = 1024000; char binarn(char a, int n, int m); void main() { clrscr(); char text[small_buff]; char btext[big_buff]; FILE *infile = fopen( "f:\\cc.txt", "rb" ); /*відкриваєм файл з крипто текстом*/ FILE *outfile = fopen( "f:\\result1.txt", "wb" ); /*створюєм файл для запису шифртексту*/ size_t read_len = 0; size_t file_len = 0; while( read_len = fread(text, 1, small_buff, infile ) ) /*знаходимо довжину файлу*/ { memcpy( btext + file_len, text, read_len ); file_len += read_len; } int q,f,p,k,i,e,chuslo;q=231;p=11; /*формуємо початкові умови шифрування*/ chuslo=q*p; char slovo,slovo1,z; f=chuslo-p-q+1; /*знаходим відкритий ключ*/ printf(”vvedit proste chuslo e v mezax= “); printf(“%d\n”,f); printf("e="); scanf(“%d”,&e); /*знаходим таємний ключ*/ for(i=0;i<=e;i++) { if (1==e*i%f) {k=i;break;} else k=0; } for(int j1=0;j1<file_len-2;j1=j1+2) { /*ділимо текст на блоки*/ for(int j=1;j>=0;j--) {for (int i=0;i<13;i++) { z=(z<<1) | btext[j+j1] & 1; btext[j+j1]= (btext[j+j1]>>1); } }char slovo=0; for (int i=0;i<13*2;i++) { slovo=(slovo<<1) | z & 1; z= (z>>1); } /*здійснюєм піднесення до степеня по модулю*/ slovo=binarn(slovo,e,chuslo); /*замінюєм блоки на слова*/ for (int i=0;i<13*2;i++) { z=(z<<1) | slovo& 1; slovo= (slovo>>1); } for( j=1;j>=0;j--) { for (i=0;i<13;i++) { btext[j+j1]=(btext[j+j1]<<1) | z & 1; z= (z>>1) ; } } } /*записуєм зашифрований текст в файл*/ fwrite( btext, 1, file_len, outfile ); fclose( infile ); fclose( outfile ); getch(); } /*бінарний метод піднесення до степеня*/ char binarn(char a, int n, int m) { if (n == 1) return a % m; char z; z = binarn(a, n / 2, m); z = (z * z) % m; if (n % 2 == 1) z = (z * a) % m; return z; } текст повідомлення: текст для за шифрування крипто текст: 6ebut%=+q ?%w 6&r+5р№4;! Блок схема програми  Висновок: в даному курсовому проекті сформовано два шифри Афінний і RSA. На базі теоретичних знань було написано програми шифрування тексту даних шифрів та аналіз програми за допомогою блок-схеми.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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