p align="center">2. Разработка программы, выполняющей шифрование и расшифрование по таблице Виженера Текст программы шифрования и расшифрования приведен в приложении Г. Данная программа написана с использованием языка программирования С. В главной функции объявляется таблица Виженера при помощи двумерного массива alfavit[27][27]. В этой функции осуществляется вызов функции шифрования. Для вывода сообщений на экран используются функции printf() и puts(). А для ввода данных используются функции scanf() и cin(). Для организации циклов в этих функциях используются операторы с предусловием while и с параметрическим циклом for. 3. Экспериментальная проверка работы программы Для проверки работы программы, выполняющей шифрование по таблице Виженера возьмем, например слово «welcome», а ключевым символом будет являться, например символ «a». После шифрования был получен следующий шифротекст:«wapnqaq» Для проверки работы программы расшифрования по таблице Виженера возьмём этот же шифротекст «wapnqaq» при этом ключевым символом должен являться символ «a». При расшифровки получим первоначальный текст «welcome». Заключение В результате выполнения курсового проекта была разработана программа, реализующая криптографический алгоритм шифрования и расшифрования с использованием открытого текста в качестве ключа по таблице Виженера. Разработанная программа написана на языке Си. Также была выполнена экспериментальная проверка работы данной программы, подтверждающая правильность шифрования. В завершении работы была оформлена пояснительная записка, содержащая описание разработки программы, осуществляющей по таблице Виженера. Таким образом, задание на курсовую работу выполнено в полном объеме. Список использованных источников 1. Керниган Б., Ритчи Д. Язык программирования Си.\Пер. с англ., 3-е изд., испр - СПб.: «Невский Диалект», 2001. - 352с.:ил. 2. Алферов А.П., Зубов А.Ю., Кузьмин А.С., Черемушкин А.В. Основы криптографии: Учебное пособие. - М.: Гелиос АРВ, 2001. - 480 с. 3. Основы криптологии. Шифры замены. Методические указания к практическим занятиям по дисциплине «Основы криптологии». / Составители М.М. Грунтович, С.М. Геращенко - Пенза: Пензен. госуд. ун_т, 2005. 4. Информатика: Базовый курс \ С.В. Симонович и др. - СПб,: Питер,2001. - 640 с. ПРИЛОЖЕНИЕ А Алгоритм программы шифрования и расшифрования ПРИЛОЖЕНИЕ Б Алгоритм функции шифрования ПРИЛОЖЕНИЕ В Алгоритм функции расшифрования ПРИЛОЖЕНИЕ Г Листинг программы шифрования и расшифрования #include <stdio.h> #include <string.h> #include <iostream.h> #include <stdlib.h> void main() {int b; int f; int z2; int z1; int y; int y1; char x1[20]={0}; char x2; char x3[20]={0}; char x5[20]={0}; char filename[40]; FILE*text; int r=0; char c; int i; int i1; int j; int j1; char t1[20]={0}; char t2; char t5[20]; static char alfavit[27][27]={ {' ','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}, {'a','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}, {'b','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a'}, {'c','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b'}, {'d','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c'}, {'e','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d'}, {'f','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e'}, {'g','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f'}, {'h','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g'}, {'i','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h'}, {'j','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i'}, {'k','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j'}, {'l','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k'}, {'m','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l'}, {'n','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m'}, {'o','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n'}, {'p','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'}, {'q','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p'}, {'r','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q'}, {'s','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r'}, {'t','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s'}, {'u','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t'}, {'v','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u'}, {'w','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v'}, {'x','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w'}, {'y','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x'}, {'z','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y'},}; while (1) {printf("\nVvedite 1 dlya shifrovaniya \nVvedite 2 dlya rasshifrovaniya\nVvedite 3 dlya vihoda\n"); scanf("%d",&b); switch (b) {case 1: printf("%d - shifrovaniye\n",b); printf("\nVibor regima:\n1 from klava\n2 from file\n"); scanf("%d",&f); switch(f) {case 1: printf("Vvedite slovo\n"); cin>>x1; printf("\nVvedite kluchevoy simvol\n"); cin>>x2; for ( z2=strlen(x1)-1;z2>0;z2--) {x3[z2]=x1[z2-1];} x3[0]=x2; x3[strlen(x1)]='\0'; printf("\nSlovo dlya shifrovaniya: %s\n",x1); printf("\nKluchevoy simvol: %c\n",x2); printf("\nKluchevaiya posledovatel'nost': %s\n",x3); int z3; for (z3=0;z3<20;z3++) {z1 = y1 = 0; if((x1[z3] !='\0')||(x3[z3] !='\0')) {for (z2=0;z2<27;z2++) if (alfavit[0][z2]==x1[z3]) {z1=z2; break;} for (y=0;y<27;y++) if (alfavit[y][0]==x3[z3]) {y1=y; break;} x5[z3]=alfavit[y1][z1];} else break;} x5[z3] = '\0'; printf("\nShifrotekst: %s\n",x5); break; case 2: puts("Put name of file with open text:\n"); scanf("%s",&filename); text=fopen(filename,"r"); while(!(feof(text))) {c=getc(text); r++;} fseek(text,0,0); i=0; while(r!=1) {c=getc(text); x1[i]=c; r--; i++;} printf("\nVvedite kluchevoy simvol\n"); cin>>x2; for ( z2=strlen(x1)-1;z2>0;z2--) {x3[z2]=x1[z2-1];} x3[0]=x2; x3[strlen(x1)]='\0'; printf("\nSlovo dlya shifrovaniya: %s\n",x1); printf("\nKluchevoy simvol: %c\n",x2); printf("\nKluchevaiya posledovatel'nost': %s\n",x3); for (z3=0;z3<20;z3++) {z1 = y1 = 0; if((x1[z3] !='\0')||(x3[z3] !='\0')) {for (z2=0;z2<27;z2++) if (alfavit[0][z2]==x1[z3]) {z1=z2; break;} for (y=0;y<27;y++) if (alfavit[y][0]==x3[z3]) {y1=y; break;} x5[z3]=alfavit[y1][z1];} else break;} x5[z3] = '\0'; printf("\nShifrotekst: %s\n",x5); fclose(text); break; default: return;} break; case 2: printf("%d - rasshifrovaniye\n",b); printf("\nVibor regima:\n1 from klava\n2 from file\n"); scanf("%d",&f); switch(f) {case 1: printf("\nVvedite shifrotekst:\n"); cin>>t1; printf("\nVvedite kluchevoy simvol:\n"); cin>>t2; printf("\nShifrotekst: %s\n",t1); printf("\nKluchevoy simvol: %c\n", t2); int i2; for (i2=0;t1[i2];i2++) {i1 = j1 = 0; {for (i=0;i<32;i++) if (alfavit[i][0]==t2) {i1=i; break;} for (j=0;j<34;j++) if (alfavit[i1][j]==t1[i2]) {j1=j; break;} t5[i2]=alfavit[0][j1];} t2=t5[i2];} t5[i2] = '\0'; printf("\nOtkritiy tekst: %s\n",t5); break; case 2: puts("Put name of file with open text:\n"); scanf("%s",&filename); text=fopen(filename,"r"); while(!(feof(text))) {c=getc(text); r++;} fseek(text,0,0); i=0; while(r!=1) {c=getc(text); t1[i]=c; r--; i++;} printf("\nVvedite kluchevoy simvol:\n"); cin>>t2; printf("\nShifrotekst: %s\n",t1); printf("\nKluchevoy simvol: %c\n", t2); for (i2=0;t1[i2];i2++) {i1 = j1 = 0; {for (i=0;i<32;i++) if (alfavit[i][0]==t2) {i1=i; break;} for (j=0;j<34;j++) if (alfavit[i1][j]==t1[i2]) {j1=j; break;} t5[i2]=alfavit[0][j1];} t2=t5[i2];} t5[i2] = '\0'; printf("\nOtkritiy tekst: %s\n",t5); fclose(text);} break; case 3: return; default: printf("%d - tolko 1 ili 2!!!\n",b); return;}}}
Страницы: 1, 2
|