МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
«ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ»
Лабораторна робота №8
«Шифрування та дешифрування даних за допомогою симетричних криптографiчних алгоритмiв.»
Виконав:
ст групи КІТ-14в
Богачов О. С.
.
ХАРКІВ 2007
Лабораторна робота №8
Тема: Шифрування та дешифрування даних за допомогою симетричних криптографiчних алгоритмiв.
Мета: cтворення програм для шифрування та дешифрування iнформацiї за допомогою симетричних шифрів.
1.Індивідуальне завдання.
Необхiдно розробити i налагодити програму яка вміщює реалізації таких алгоритмів шифрування:проста перестановка; гамування за Лемером; система шифрування Вижинера;
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 налагодили програму, яка вміщює реалізації таких алгоритмів шифрування: проста перестановка; гамування за Лемером; система шифрування Вижинера.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.