Лабораторная работа №5 Вариант 2
.docФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ
Лабораторная работа №5
«Программирование алгоритмов кодирования информации»
по дисциплине
«Технология программирования»
|
Студент |
|
|
|
Бутаков В.В. |
|
||||||||
|
|
|
подпись, дата |
|
фамилия, инициалы |
|
||||||||
|
Группа |
|
АС-09 |
|
|
|
|
|||||||
|
|
|
|
|
|
|
||||||||
|
Принял |
|
|
|
|
|
||||||||
|
|
|
|
|
Домашнев П.А. |
|
||||||||
|
ученая степень, звание |
|
подпись, дата |
|
фамилия, инициалы |
|
Липецк 2010
-
Задание
Задание кафедры
Написать программу, осуществляющую кодирование и раскодирование последовательности из входного файла заданным методом и сохраняющую результат в выходной файл. Имена файлов вводит пользователь. Режим работы с файлам – двоичный. Для алгоритмов шифрования/дешифрования пользователь должен вводить также ключ.
Вариант 2
Алгоритм шифрования: метод Вижинера
Краткие теоретические сведения.
Шифр Виженера — метод полиалфавитного шифрования буквенного текста с использованием ключевого слова.
Этот метод является простой формой многоалфавитной замены. Шифр Виженера изобретался многократно. Впервые этот метод описал Джован Баттиста Беллазо в 1553 году, однако в XIX веке получил имя Блеза Виженера, швейцарского дипломата. Метод прост для понимания и реализации, он является недоступным для простых методов криптоанализа.
-
Блок-схема программы
-
Листинг программы
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *I,*O;
char cod[100],input[100],output[100],x;
void Coding(int n)
{
printf("Input name input:\t");
scanf("%s",&input);
printf("Input name output:\t");
scanf("%s",&output);
I=fopen(input,"rb");
O=fopen(output,"wb");
printf("Input cod:\t");
scanf("%s",&cod);
int l=strlen(cod);
for(int i=0;fread(&x,sizeof(char),1,I)==1;i++)
{
if(n)x=(x+(int)cod[i%l])%256;
else x=(256+x-(int)cod[i%l])%256;
printf("%c",x);
fwrite(&x,sizeof(char),1,O);
}
fclose(I);
fclose(O);
cod[0]='0';
getch();
}
void menu()
{
system("cls");
puts("Press for:\n1\tCoding\n2\tDecoding\n0\tExit");
int x=getch();
if(x==48)exit(1);
else if(x==49)Coding(1);
else if(x==50)Coding(0);
menu();
}
void main()
{
menu();
}
-
Контрольный пример