Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №5 Вариант 2

.doc
Скачиваний:
7
Добавлен:
20.06.2014
Размер:
284.67 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ

Лабораторная работа №5

«Программирование алгоритмов кодирования информации»

по дисциплине

«Технология программирования»

Студент

Бутаков В.В.

подпись, дата

фамилия, инициалы

Группа

АС-09

Принял

Домашнев П.А.

ученая степень, звание

подпись, дата

фамилия, инициалы

Липецк 2010

  1. Задание

Задание кафедры

Написать программу, осуществляющую кодирование и раскодирование последовательности из входного файла заданным методом и сохраняющую результат в выходной файл. Имена файлов вводит пользователь. Режим работы с файлам – двоичный. Для алгоритмов шифрования/дешифрования пользователь должен вводить также ключ.

Вариант 2

Алгоритм шифрования: метод Вижинера

Краткие теоретические сведения.

Шифр Виженера — метод полиалфавитного шифрования буквенного текста с использованием ключевого слова.

Этот метод является простой формой многоалфавитной замены. Шифр Виженера изобретался многократно. Впервые этот метод описал Джован Баттиста Беллазо в 1553 году, однако в XIX веке получил имя Блеза Виженера, швейцарского дипломата. Метод прост для понимания и реализации, он является недоступным для простых методов криптоанализа.

  1. Блок-схема программы

  1. Листинг программы

#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();

}

  1. Контрольный пример