Разработка программы, выполняющей шифрование и расшифрование по таблице Виженера




 

Текст программы шифрования и расшифрования приведен в приложении Г.

Данная программа написана с использованием языка программирования С.

В главной функции объявляется таблица Виженера при помощи двумерного массива 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;}}}



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-12-28 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: