Текст программы шифрования и расшифрования приведен в приложении Г.
Данная программа написана с использованием языка программирования С.
В главной функции объявляется таблица Виженера при помощи двумерного массива alfavit[27][27].
В этой функции осуществляется вызов функции шифрования.
Для вывода сообщений на экран используются функции printf() и puts(). А для ввода данных используются функции scanf() и cin().
Для организации циклов в этих функциях используются операторы с предусловием while и с параметрическим циклом for.
Экспериментальная проверка работы программы
Для проверки работы программы, выполняющей шифрование по таблице Виженера возьмем, например слово «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;}}}