Программа coDec

Задано число к и последовательность чисел от 1 до к 1......к. Необходимо


зашифровать литерную последовательность, находящуюся в файле в соответствии с


введенной последовательностью. Выходные данные записать в файл. Например, если к


равно 4 и последовательность S3,S2,S4,S1 то символы S1,S1,S3,S4 преобразуются в


S3,S2,S4,S1. Если количество символов не кратно к, то в конце последовательности


необходимо добавить пробелы.


2. Описание применения


2.1. Назначение программы


Программа coDec предназначена для шифрации и дешифрации символьного массива,


находящегося в файле.


2.2. Условия применения


Программа предъявляет очень скромные требования к ресурсам вычислительной


установки. Тем не менее, в случае необходимости использовать для компиляции и


сборки программы С на машинах типа PC необходимо иметь 8Мбайт оперативной


памяти. Программа в состоянии брать из любого каталога файлы и также записывать


файлы в произвольную директорию, указанную вами. Однако не следует пренебрегать


общими принципами шифрации и дешифрации информационных данных , то есть


воспринимать сей труд как панацею зашиты от посторонних лиц. Любая


закодированная порция данных может быть с легкостью преобразована в исходный


текст подбором ключа, путем перестановки литер для нахождения логичного


варианта.


Описание задачи


Задача, поставленная на практике, состояла в необходимости набора некоего числа


к и последовательности 1.....к, и перегруппировке символьного массива из одного


файла в символьный массив другого файла, в соответствии с раннее введенной


последовательностью.


Кодирование достигается следующим образом: из символьного массива файла


источника последовательно берутся символы и записываются в новый символьный


массив В[ ] (B[i+1]=c), далее из этого массива происходит также последовательно


запись в файл, за исключением того, что индексы записываемых символов равны


последовательности (B[pointer], где pointer равен массиву последовательности).


Декодирование: принцип работы декодирования противоположен кодированию и состоит


в том, что новому массиву В[ ] с индексами последовательности присваиваются


считываемые символы (B[pointer]=c), а затем производится запись этого массива,


но уже с индексами от 1 до к (B[i+1]).


3.Описание программы


3.1.Общие сведения


Программа coDec предназначена для шифрации и дешифрации символьного массива,


находящегося в файле.


Для выполнения программы достаточно вычислительной установки типа PC с


процессором i386 и выше и 8 Мбайт оперативной памяти, оснащенной любой из


следующих операционных систем: MS DOS (начиная с версии 5.0), Windows 95,


Windows NT версий 4.0.


Программа coDec написана на языке Visual C++, реализованном, например, в


компиляторе MS Developer Studio v.4.2 для операционных систем Windows NT и


Windows 95.


3.2. Функциональное назначение


Программа применяется для шифрования или дешифрации данных из одного файла в


другой. Однако не всякое сочетание исходных данных позволяет получить желаемый


результат, например, не рекомендуется загружать *.exe и прочие файлы, имеющие в


своей структуре помимо текстовых данных, спецсимволы, в некоторых случаях


воспринимаемые программой как конец файла.


3.3. Описание логической структуры


Примечания вида "см. Текст", встречающиеся в этом разделе, означают ссылки на


документ “Текст программы”.


Описание головной программы


В Разделе 1 (см. Текст) производится подлключение стандартных библиотек


компилятора для обеспечения функционирования отдельных операторов и всей


программы в целом.


В Разделе 2 (см. Текст) осуществляется описание переменных.


В Разделе 3 (см. Текст) производится выбор дальнейшего действия программы:


кодирования (0) или декодирования (1) литерной последовательности, содержащейся


в исходном файле, в выходной файл.


Конструкция while (1) обеспечивает постоянное выполнение цикла до тех пор, пока


не выполнится условие if, которое прерывает его действие оператором break.


В Разделе 4 находится цикл ввода длины кодовой последовательности, который


автоматически проверяет условие правильности введенного значения.


Сообщение "Error!!! K must be integer from 1 to 10" означает, что введенный вами


символ не удовлетворяет требованиям и необходимо повторить ввод заново.


В Разделе 5 организован цикл последовательности с проверкой вычисления


контрольной суммы, путем подсчета введенной суммы и суммы из массива W[ ] с


последующим сравнением обоих результатов. Если суммы не совпадают, цикл


повторяется снова, в противном случае выполняется последующий оператор.


Сообщение " Error!!! Repeat input" говорит о том, что последовательность


неправильна и необходимо повторить ввод заново.


Раздел 6 образован для ввода и открытия для чтения исходного файла, открытия и


записи выходного файла. Литера “r” обозначает, что файл открывается для чтения,


соответственно “w”-для записи. При открытии происходит автоматическая проверка


существования в указанной директории файла. Если программа не в состоянии найти


или открыть его выводиться сообщение об ошибке “Error!!! Can't open file” и


снова запрашивается имя, если же ош

ибок не найдено выполняется следующее


действие-запрос имени файла для результатов.


Раздел 7 предназначен для шифрации данных. Его организация устроена по принципу,


описанному в разделе 2.3. При этом, если в последней последовательности не


хватает n символов до к, программа автоматически приписывает дополнительные


пробелы. Конструкция if (feof(fp)&&i==0) return 0 - образована для исключения


дополнительного цикла, который может возникнуть, если количество символов в


файле кратно к, в этом случае выполняется лишний цикл, приводящий к добавлению


дополнительных пробелов и, следовательно, увеличению файлов. При достижении


конца файла EOF шифрации прекращается.


Раздел 8 Дешифрация и запись в файл-приемник-устроен практически по тому же


принципу как и в разделе 7.Различия между операциями кодирования и декодирования


приводятся в подразделе “Описание задачи”. Дешифрация также прекращается при


достижении конца файла.


Раздел 9 закрывает раннее открытые файлы.


3.4. Используемые технические средства


Для выполнения программы достаточно компьютера типа IBM PC с процессором i386 и


выше и 8 Мбайт оперативной памяти, оснащенной любой из следующих операционных


систем: MS DOS (начиная с версии 5.0), Windows 95, Windows NT версий 4.0.


3.5. Вызов и загрузка


Запуск программы происходит путем запуска файла coDec. exe


3.6 Входные и выходные данные


Файлы-источники при кодировке по возможности должны быть с расширением txt, в то


время как файл-приемник может иметь любое. Вызвано это причинами, описанными


ранее в пункте 3.2. При декодировке ограничений нет.


4.Текст программы


// Шифратор-дешифратор


Раздел №1


# include <stdio.h>


# include <io.h>


# include <stdlib.h>


# include <iostream.h>


# include <string.h>


# include <math.h>


int main ()


{ Раздел №2


FILE *fp,*fp2; / *указатели на поток*/


int i,k,Sum,Sum_contr,pointer,select;


int W[]={1,2,3,4,5,6,7,8,9,10}; /*массив проверки*/


int Y[10]; /*массив для кодовой перестановки*/


char B[11]; /*массив для перестановленных символов*/


char c; /*переменная для хранения символа*/


char fname[20], fname2[20]; /*массивы для имен файлов*/


/* О с н о в н о е т е л о п р о г р а м м ы */


Раздел №3


/*Выбор кодирования-декодирования*/


while (1)


{


printf ("nChoose coder(0) or decoder (1) ");


scanf("%d",&select);


if ((select==0)(select==1)) break;


while (getchar()!='n');


}


Раздел №4


/*Ввод длины кодовой последовательности*/


while (1)


{


printf ("nInput length of code k(1 to 10) ");


scanf ("%d", &k);/* ввод десятичного целого*/


if (k>=1&&k<=10&&k==ceil(k)) break;


while (getchar()!='n') ;


printf ("n Error!!! K must be integer from 1 to 10 ");


}


Раздел №5


/*Ввод перестановки*/


while (1)


{


printf ("n Input %d elements n",k);


for (Sum=0,Sum_contr=0,i=0; i<k; i++)


{


printf ("Element[%d]:",i+1);


scanf ("%d", &Y[i]);


Sum+=Y[i];


Sum_contr+=W[i]; /*Вычисление контрольной суммы*/


}


if (Sum==Sum_contr) break;


while (getchar()!='n');


printf ("n Error!!! Repeat input");


}


/*Очистка входного потока*/


while (getchar()!='n') ;


Раздел №6


/* Ввод имени файла-источника */


puts ("nInput name of file-sourche :");


gets (fname);


/*Открытие файла-источника*/


while((fp=fopen(fname,"r"))==NULL) /*открытие файла для чтения*/


{


puts("Error!!! Can't open file nInput name of file-sourcen");


gets (fname);


}


/* Ввод имени файла-приемника */


puts ("nInput name of file for results:");


gets (fname2);


/*Создание файла-приемника*/


if ((fp2=fopen(fname2,"w"))==NULL) /*открытие файла для записи*/


{


perror(fname2);


return 1;


}


Раздел №7


/*Шифрация и запись в файл-приемник*/


if (select==0)


{


while (1)


{


for (i=0;i<k;i++)


{


c=fgetc(fp);


if (feof(fp)&&i==0) return 0;


if (feof(fp)&&i>0)


B[i+1]=' ';


else


B[i+1]=c;


}


for (i=0;i<k;i++)


{


pointer=Y[i];


putc(B[pointer],fp2);


}


if (feof(fp)) break;


}


}


Раздел №8


/*Дешифрация и запись в файл-приемник*/


else


{


while (1)


{


for(i=0;i<k;i++)


{


c=getc(fp);


pointer=Y[i];


B[pointer]=c;


}


if (feof(fp)) break;


for (i=0;i<k;i++)


putc(B[i+1],fp2);


}


}


Раздел №9


/*Закрытие файла источника и приемника*/


fclose(fp);


fclose(fp2);


}

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Программа coDec

Слов:1278
Символов:12268
Размер:23.96 Кб.