|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Кодировщик-декодировшикКодировщик-декодировшикМинистерство образования РФ Уральский государственный технический университет -УПИ Кафедра "Технология и средства связи" ОТЧЁТ по учебной практике Преподаватель: Петров Р.А. Студент: Черепанов К.А. Группа: Р-207 Екатеринбург 2000 СОДЕРЖАНИЕ 1.Задание............................................................... ..........................................………...3 2.Описание применения........…..................................................... .................……….3 2.1. Назначение программы............................................................... ..........……….3 2.2. Условия применения.........….................................................... ..............………3 2.3. Описание задачи..................…............................................... ................……….3 3.Описание программы..................…............................................ .................………..4 3.1. Общие сведения................................................................ ................….……….4 3.2. Функциональное назначение..…........................................................... ………4 3.3. Описание логической структуры...................................................…………..4 3.4. Используемые технические средства.....................................................….......5 3.5. Вызов и загрузка................................................................ ....................………..5 3.6. Входные и выходные данные............….................................................………5 4. Текст программы......................................…........................ .......................………..6 1.Задание Задано число к и последовательность чисел от 1 до к 1......к. Необходимо зашифровать литерную последовательность, находящуюся в файле в соответствии с введенной последовательностью. Выходные данные записать в файл. Например, если к равно 4 и последовательность S3,S2,S4,S1 то символы S1,S1,S3,S4 преобразуются в S3,S2,S4,S1. Если количество символов не кратно к, то в конце последовательности необходимо добавить пробелы. 2. Описание применения 2.1. Назначение программы Программа coDec предназначена для шифрации и дешифрации символьного массива, находящегося в файле. 2.2. Условия применения Программа предъявляет очень скромные требования к ресурсам вычислительной установки. Тем не менее, в случае необходимости использовать для компиляции и сборки программы С на машинах типа PC необходимо иметь 8Мбайт оперативной памяти. Программа в состоянии брать из любого каталога файлы и также записывать файлы в произвольную директорию, указанную вами. Однако не следует пренебрегать общими принципами шифрации и дешифрации информационных данных , то есть воспринимать сей труд как панацею зашиты от посторонних лиц. Любая закодированная порция данных может быть с легкостью преобразована в исходный текст подбором ключа, путем перестановки литер для нахождения логичного варианта. 3. Описание задачи Задача, поставленная на практике, состояла в необходимости набора некоего числа к и последовательности 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) 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-source\n"); 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); } |
РЕКЛАМА
|
|||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |