Шифрування та дешифрування даних за допомогою симетричних криптографiчних алгоритмiв

Страницы работы

Содержание работы

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

«ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ»

Лабораторна робота №8

«Шифрування та дешифрування даних за допомогою симетричних  криптографiчних алгоритмiв.»

                                                            Виконав:

 ст групи КІТ-14в

Богачов О. С.

.                                                                                         

ХАРКІВ 2007

Лабораторна робота №8

Тема: Шифрування та дешифрування даних за допомогою симетричних  криптографiчних алгоритмiв.

Мета: cтворення програм для шифрування та дешифрування iнформацiї за допомогою симетричних шифрів.

1.Індивідуальне завдання.

Необхiдно розробити i налагодити програму яка вміщює реалізації таких алгоритмів шифрування:проста перестановка; гамування за Лемером; система шифрування Вижинера;

2.Алгоритм програми:

  1. Програма послідовно зашифровує файл 3-ма алгоритмами.
  2. Програма розшифровує файл у оберненому порядку.

3.Текст програми:

#include<stdio.h>

#include<conio.h>

#include<process.h>

#include<string.h>

#define N 10

#define false 0

#define true 1

int lemmer (char name1[50], char name2[50])

{

   FILE *input,*output,*fin;

   char ch;

   unsigned long Gn;//,K,C,M;

   Gn=5; //!!!!

   /* open a file for update */

   input = fopen(name1, "rb");

   output =fopen(name2, "w+b");

   do

   {

      /* read a char from the file */

      ch = fgetc(input);

      if (feof(input)) break;

      ch=ch^Gn;

   Gn=(3+8*564)*Gn+3%64;

      /* display the character */

        putch(ch);

      fputc(ch,output);

   } while (!(feof(input)));

      fcloseall();

   return 0;

}

int lemmer2 (char name1[50], char name2[50])

{

  FILE *input,*output,*fin;

   char ch;

   unsigned long Gn;//,K,C,M;

   Gn=5; //!!!!

   output =fopen(name1, "rb+");

   fin =fopen(name2, "wb+");

      do

   {

    /* read a char from the coded file */

   ch = fgetc(output);

   if (feof(output)) break;

   ch=ch^Gn;

   Gn=(3+8*564)*Gn+3%64;

   putch(ch);

   fputc(ch,fin);

   } while (!feof(output));

   fcloseall();

   return 0;

}

int perest(char name1[50], char name2[50])

{

 int fl=0;

 FILE *fin, *fout;

 char mas[N][N];

 int mas2[N];

 char temp[N];

 int s;

 int cnt=0;

//Opredelenie razmera

  fin = fopen(name1,"rb");

 while (!feof(fin))

       {

               printf("%c",getc(fin));

               cnt++;

       }

 fclose(fin);

 cnt--;

 int sym=0;

 if((fin = fopen(name1,"rb+")) == NULL)

        {

                 printf("Cannot open input file.\n");

                 exit(0);

        }

 if((fout = fopen(name2, "wb+")) == NULL)

        {

               printf("Cannot open output file.\n");

                 exit(0);

        }

     while(!fl)

 {

  for(int i=0; i<N; i++)

     for(int j=0; j<N; j++)

    {

      fl = feof(fin);

      fscanf(fin, "%c", &mas[i][j]);

    }

   for(int j=0; j<N; j++)

     for(int i=0; i<N; i++)

   {

//    if (sym>=cnt) break;

    fprintf(fout, "%c",mas[i][j]);

     sym++;

   }

 }

 fclose(fin);

 fclose(fout);

 return 0;

 }

 int perest2(char fr[50],char name1[50], char name2[50])

{

 int fl=0;

 FILE *fin, *fout;

 char mas[N][N];

 int mas2[N];

 char temp[N];

 int s;

 int cnt=0;

//Opredelenie razmera

  fin = fopen(fr,"rb");

 while (!feof(fin))

       {

               printf("%c",getc(fin));

               cnt++;

       }

 fclose(fin);

 cnt--;

 int sym=0;

 if((fin = fopen(name1,"rb+")) == NULL)

        {

                 printf("Cannot open input file.\n");

                 exit(0);

        }

 if((fout = fopen(name2, "wb+")) == NULL)

        {

               printf("Cannot open output file.\n");

                 exit(0);

        }

     while(!fl)

 {

  for(int i=0; i<N; i++)

     for(int j=0; j<N; j++)

    {

      fl = feof(fin);

      fscanf(fin, "%c", &mas[i][j]);

    }

   for(int j=0; j<N; j++)

     for(int i=0; i<N; i++)

   {

    if (sym>=cnt) break;

    fprintf(fout, "%c",mas[i][j]);

     sym++;

   }

 }

 fclose(fin);

 fclose(fout);

 return 0;

 }

int viz(char name1[50], char name2[50])

{

   FILE *input,*output,*fin;

   char ch;

   char key1 [20];

key1[0]='m'; key1[1]='a'; key1[2]='x'; key1[3]='\0';

   /* open a file for update */

   input = fopen(name1, "rb");

   output =fopen(name2, "w+b");

   int i=0;

   do

   {

      /* read a char from the file */

      ch = fgetc(input);

      if (feof(input)) break;

      ch=ch+key1[i%strlen(key1)];

      i++;

      /* display the character */

        putch(ch);

      fputc(ch,output);

   } while (!(feof(input)));

      fcloseall();

return 0;

}

int viz2(char name1[50], char name2[50])

   {

   FILE *input,*output,*fin;

       char key2 [20];

key2[0]='m';key2[1]='a';key2[2]='x'; key2[3]='\0';

   output = fopen(name1, "rb+");

   fin =fopen(name2, "wb+");

   int i=0;

      do

   {

    /* read a char from the coded file */

   int ch = fgetc(output);

   if (feof(output)) break;

   ch=ch-key2[i%strlen(key2)];

   i++;

   putch(ch);

   fputc(ch,fin);

   } while (!feof(output));

   fcloseall();

   return 0;

}

void main(void)

{

clrscr(); // Проста перестановка

perest("c:\\text.rsa","c:\\result1.txt");

getch();

clrscr(); // Гамування за Лемером

lemmer("c:\\result1.txt","c:\\result2.txt");

getch();

clrscr(); // Система шифрування Виженера

viz("c:\\result2.txt","c:\\result3.txt");

getch();

clrscr();

viz2("c:\\result3.txt","c:\\text1.rsa");

getch();

clrscr();

lemmer2("c:\\text1.rsa","c:\\text2.rsa");

getch();

clrscr();

perest2("c:\\text.rsa","c:\\text2.rsa","c:\\text3.rsa");

getch();

}


4.Результати роботи програми:В результаті роботи програми отримали зашифрований файл, який при розшифруванні дав той же самий текст, що і на початку.

Висновок: розробили i налагодили програму, яка вміщює реалізації таких алгоритмів шифрування: проста перестановка; гамування за Лемером; система шифрування Вижинера.

Похожие материалы

Информация о работе