Шифрование/дешифрование файлов методом сложения с ключом (ключ задается пользователем)

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    8,04 Кб
  • Опубликовано:
    2013-05-17
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Шифрование/дешифрование файлов методом сложения с ключом (ключ задается пользователем)

московский энергетический институт

(технический университет)









Курсовая работа

по дисциплине «Системное программное обеспечение»

Шифрование/дешифрование файлов методом сложения с ключом (ключ задается пользователем)




Студент: Махов Роман

Группа: А-8-07




Москва 2010

Оглавление

Введение

. Анализ задания

. Проектирование пользовательского интерфейса

. Выбор формата представления данных

. Список процедур, макросов и их назначение

. Используемые в программе функции

. Тестирование и отладка программы

Заключение

Список литературы

Приложение

Введение

В данном курсовом проекте рассматривается программа, осуществляющая шифрование. Проект состоит из двух программ, шифрование и дешифрование, соответственно. С помощью этой программы можно зашифровать любой файл произвольным ключом, им же и только им, можно будет декодировать закодированный файл и восстановить его первоначальный вид. При кодировании и декодировании, разработанную программу не интересует формат и размер.

1.Анализ задания

Для реализации поставленного задания необходимо:

a)Ввести путь к файлу, который c которым будем дальше работать.

Ввод будет осуществляться в буфер. Для этого нам понадобится функция 0aH. Данная функция заносит вводимые символы в структуру определенного формата. В первом байте указана максимально возможная длинна строки, во втором действительная длинна вводимой строки, далее текст вводимый с клавиатуры, заканчивающийся символом CR (ASCII 0dH). Функция очень удобна и позволяет редактировать вводимые файлы до тех пор, пока не будет нажат ENTER. Таким же образом реализован и ввод ключа для кодирования.

b)Открыть файл.

В данном проекте операции над файлами будут реализованы через файловые индексы. Следовательно, нам необходимо подобрать необходимые для этого функции. Для открытия файла будет использована функция 3dH работающая по прерыванию INT 21. При открытии будет выбран режим «чтение-запись». Путь к файлу должен быть в формате ASCIZ-строки. Так же при открытии файла, мы должны предусмотреть тот случай, когда указанный файл не найден или не существует.

c)Создание файла, в котором будут формироваться выходные данные.

Необходимо создать файл выбранного пользователем разрешения. После создания нужно запомнить файловый индекс, для дальнейшей работы с созданным файлом. Это будет реализовано с помощью функции 3сH работающей по прерыванию INT 21. Если указать имя уже существующего файла, то при открытии файл усекается до нулевой длинны. Путь к файлу должен быть в формате ASCIZ-строки.

d)Чтение и запись данных.

Итак, входной и выходной файлы открыты, необходимо выбрать функции с помощью которых будут реализованы чтение и запись данных - 3fH и 40H соответственно. По структуре эти функции схожи.

Файл для чтения или записи выбирается файловым индексом. В обоих случаях функции будут возвращать в CX число считанных(записанных байт). В ВХ необходимо указать адрес буфера куда будут считываться или откуда будут писаться данные.

e)Завершение работы программы.

После выполнения кодирования (декодирования) программа должна закрыть использовавшиеся файлы и вернуться в DOS. Для этого будет реализована процедура EXIT, в которой закрытие файлов будет выполнено с помощью функции 3eH (BX содержит файловый индекс (handle), возвращенный при открытии. Файл, представленный этим индексом, закрывается, его буфера сбрасываются, и оглавление обновляется корректными размером, временем и датой.). Возвращение в DOS реализовано стандартной функцией завершения программы - 4cH.

. Проектирование пользовательского интерфейса

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

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

3. Выбор формата представления данных

Для определения переменных в моей программе используются метки типа byte (db) и word (dw).

Все строковые сообщения определяются как byte, т.к. только с помощью директивы db можно определить строку, состоящую из нескольких символов. В таблице 1 перечислены все переменные, использующиеся в программе.

Таблица 1. Список переменных.

ИмяМеткаПримечаниеrequst_in_filedbСообщение. Приглашение к вводу вх. файлаrequst_out_filedbСообщение. Приглашение к вводу вых. файлаrequst_keydbСообщение. Приглашение к вводу ключаerr_in_file_mdbСообщение. Ошибка открытия вх. файлаerr_out_file_mdbСообщение. Ошибка открытия вых. файлаerr_key_mdbСообщение. Ошибка при вводе ключаmess_donedbСообщение. Оповещение о выполненииnew_strdbСимволы перевода каретки на новую строку.buffdbПеременная для хранения считываемых данных.handle_indwПеременная для хранения файлового индекса входного файлаhandle_outdwПеременная для хранения файлового индекса выходного файлаkey_lendwПеременная для хранения значения количества символов ключаcountdwПеременная для хранения значения количества считанных байт.

. Список процедур, макросов и их назначение

В таблице 2 указан список процедур, макросов и их назначение.

Таблица 2. Список процедур, макросов и их назначение.

INITSRDМакрос производит инициализацию регистров DS и ES.input_kbdМакрос служит для вывода на экран приглашения для ввода данных с клавиатуры.readМакрос служит для выполнения чтения из файла.writeМакрос служит для выполнения записи в файл.init Макрос служит для инициализации регистров. err_keyПроцедура выводящая сообщение об ошибке.err_in_fileПроцедура выводящая сообщение об ошибке.err_out_fileПроцедура выводящая сообщение об ошибке.coding(decoding)Процедура выполняющая кодирование, (декодирование) по методу сложения с ключем.exitПроцедура закрывающая открытые файлы и передающая управление в Dos.

5. Используемые в программе функции

интерфейс шифрование файл макрос

Для вывода строки на экран используется:

Функция 09H прерывания INT 21H

Вход

·AH = 09H

·DS:DX = адрес строки, заканчивающейся символом '$' (ASCII 24H)

Выход

·нет

Для ввода строки в буфер:

Функция 0ah прерывания 21h.

Вход

·AH = 0aH

·DS:DX = адрес входного буфера (смотри ниже)

Выход

·нет = буфер содержит ввод, заканчивающийся символом CR (ASCII 0dH)

Для открытия файла:

Функция 3dH прерывания INT 21H

Вход

·AH = 3dH

·DS:DX = адрес строки ASCIIZ с именем файла

·AL = режим открытия

Выход

·AX = код ошибки если CF установлен и файловый индекс если нет ошибки.

DS:DX указывает на строку ASCIIZ в формате: "d:\путь\имяфайла",0. Если диск и/или путь опущены, они принимаются по умолчанию.

·файл должен существовать.

·файл открывается в выбранном режиме доступа / режиме открытия:

oAL = 0 чтобы открыть для чтения

oAL = 1 чтобы открыть для записи

oAL = 2 чтобы открыть для чтения и записи

Для создания файла:

Функция 3сН прерывания INT 21Н

Вход

·AH = 3cH

·DS:DX = адрес строки ASCIIZ с именем файла

·CX = атрибут файла

Выход

·AX = код ошибки если CF установлен и файловый индекс если ошибки нет

Описание:

DS:DX указывает на строку ASCIIZ в формате: "d:\путь\имяфайла",0. если диск и/или путь опущены, они принимаются по умолчанию.

·файл создается в указанном (или умалчиваемом) оглавлении

·файл открывается в режиме доступа чтение/запись

·вы должны сохранить файловый индекс (handle) для последующих операций

·если файл уже существует:

·при открытии файл усекается до нулевой длины

·если атрибут файла - только чтение, открытие

Для чтения данных из файла:

Функция 3FН прерывания INT 21Н

Вход

·AH = 3fH

·BX = файловый индекс

·DS:DX = адрес буфера для чтения данных

·CX = число считываемых байт

Выход

·AX = код ошибки если CF установлен или число действительно прочитанных байт

Описание:

CX байт данных считываются из файла с файловым индексом, указанным в BX. данные читаются с текущей позиции указателя чтения/записи файла и помещаются в буфер вызывающей программы, адресуемый через DS:DX.

Для записи в файл:

Функция 40Н прерывания INT 21Н

Вход

·AH = 40H

·BX = файловый индекс

·DS:DX = адрес буфера, содержащего записываемые данные

·CX = число записываемых байт

Выход

·AX = код ошибки если CF установлен

·AL = число реально считанных байт (лучший тест для ошибок)

Описание:

CX байт данных записывается в файл с файловым индексом, заданным в BX. данные берутся из буфера, адресуемого через DS:DX. данные записываются, начиная с текущей позиции указателя чтения/записи файла.

Для закрытия файла:

Функция 3Eh прерывания INT 21h

Вход

·AH = 3eH

·BX = файловый индекс

Выход

·AX = код ошибки если CF установлен

Описание:

BX содержит файловый индекс (handle), возвращенный при открытии. файл, представленный этим индексом, закрывается, его буфера сбрасываются, и оглавление обновляется корректными размером, временем и датой.

6. Тестирование и отладка программы

Тестирование на ошибочный ввод параметров.)Попытаемся указать путь к несуществующему файлу.)Не вводить ключ.

Тестирование правильной работы программы.

Для тестирования правильной работы программы были использованы файлы с различными параметрами, соответственно с разными размерами расширениями.

Результат:

Программа выполнила все тесты, правильно отреагировав на все возможные ошибки.

Заключение

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

Так как в программе использованы стандартные устройства ввода-вывода, впервые введенные в MS-DOS 2.0, то для работоспособности программы необходимо наличие на машине операционной системы не ниже чем MS-DOS 2.0.

Возможно дальнейшее усовершенствование данной программы в сторону быстродействия.

Список литературы

1. П. Абель Язык ассемблера для IBM PC и программирования - М.: ЭНТРОП, 2007. -447с.

. Файл руководства по системным функциям - interrup.lst

. Сведения о функциях работающих по прерыванию INT 21: #"justify">Приложение

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

.model small

.data_in_file LABEL BYTE ;Список параметров:

maxlen_in DB 20 ; Максимальная длина_in DB ? ; Реальная длина_in DB 20 DUP (' ') ; Введенные символы

Input_out_file LABEL BYTE ;Список параметров:

maxlen_out DB 20 ; Максимальная длина_out DB ? ; Реальная длина_out DB 20 DUP (' ') ; Введенные символы_key LABEL BYTE ;Список параметров:_key DB 20 ; Максимальная длина_key DB ? ; Реальная длина_key DB 20 DUP (' ') ; Введенные символы

;----------------------------------------------------------------------------_str db 10,13,'$'_in_file db 'sourse file is :','$'_out_file db 'out file is :','$'_key db 'key is :','$'_in_file_m db 'error: cannot open sourse file','$'_out_file_m db 'error: cannot open out file','$'_key_m db 'error: key was not entered','$'_done db 'done.','$'db 256 DUP (0)_in dw ?_out dw ?_len dw ?

count dw ?

;----------------------------------------------------------------------------

.code

;Макрос ввода с клавиатуры

input_kbd macro request, label_kbd, namefldah,09hdx,request ;запрос на ввод21h

mov ah,09hdx,new_str ;переход на новую строку21hah,0ahdx,label_kbd ;ввод данных с клавиатуры

int 21h

mov ah,09hdx,new_str ;переход на новую строку21hbx,bx ;делаем введенную строку ASCIZ-строкой

mov bl,[label_kbd+1][namefld+bx],0

;----------------------------------------------------------------------------

;макрос чтения из файлаmacro file_handle,byte_readah,3Fhbx,file_handle ;файловый индекс

mov cx,byte_read ;число считываемых байтdx,buff ;адрес буфера для чтения данных21h

;макрос записи в файл

write macro file_handle,byte_writeah,40hbx,file_handle ;файловый индекс

mov cx,byte_write ;число записываемых байтdx,buff ;адрес буфера, содержащего записываемые данные21h

;макрос инициализацииmacroax,@data ;установка регистра ds на началоds,ax ;сегмента данных

;----------------------------------------------------------------------------

;код;макрос инициализации

;----------------------------------------------------------------------------

input_kbd requst_in_file, Input_in_file, namefld_in ;макрос ввода входного файла_kbd requst_out_file, Input_out_file, namefld_out ;макрос ввода выходного файла_kbd requst_key, Input_key, namefld_key ;макрос ввода ключа

;----------------------------------------------------------------------------actlen_key,0err_noerr_key

;----------------------------------------------------------------------------_no:

mov ah,3dh ;открытие исходного файлаal,02h ;режим чтения-записи

lea dx,namefld_in21hin_file_rdyerr_in_file

;----------------------------------------------------------------------------_file_rdy:handle_in,ax ;запоминаем файловый индекс

mov ah,3ch ;создание выходного файла

mov cx,0 ;обычный файлdx,namefld_out21hout_file_rdyerr_out_file

;----------------------------------------------------------------------------_file_rdy:

mov handle_out,ax ;запоминаем файловый индекс

xor bx,bxbl,actlen_key

mov key_len,bx ;запоминаем длину ключа в key_len

;----------------------------------------------------------------------------coding

;----------------------------------------------------------------------------exit

;----------------------------------------------------------------------------proc near:handle_in,key_len ;читаем из входного файлаcount,axax, 0copy_retsi,buffdi,namefld_keycx,count_key:al,[di]

add [si],al ;cумируем данные с ключем

inc sidiadd_key

write handle_out,count ;записываем просуммированное в выходной файл

cmp ax,key_lencopy_ret:endp

;----------------------------------------------------------------------------

;----------------------------------------------------------------------------

;----------------------------------------------------------------------------

;в программе декодирующей закодированный файл, необходимо заменить

;процедуру coding на decoding. Описание процедуры decoding приведено ниже

decoding proc near:handle_in,key_len ;читаем из входного файлаcount,axax, 0copy_retsi,buffdi,namefld_keycx,count_key:al,[di][si],al ;вычитаем ключsidiadd_keyhandle_out,count ;записываем просуммированное в выходной файлax,key_lencopy_ret:endp

;----------------------------------------------------------------------------

;----------------------------------------------------------------------------

;----------------------------------------------------------------------------_key proc nearah,09hdx,err_key_m ;error: key was not entered21hexit_key endp

;----------------------------------------------------------------------------_in_file proc nearah,09hdx,err_in_file_m ;error: cannot open sourse file21hexit_in_file endp

;----------------------------------------------------------------------------_out_file proc nearah,09hdx,err_out_file_m ;error: cannot open out file21hexit_out_file endp

;----------------------------------------------------------------------------proc nearah,3eh ;закрываем входной файл

mov bx,handle_in21h

mov ah,3eh ;закрываем выходной файл

mov bx,handle_out21hah,09hdx,new_str ;пропускаем строку21hah,09hdx,mess_done ;done.

int 21hax,4c00h ;завершение программы21hendp

Похожие работы на - Шифрование/дешифрование файлов методом сложения с ключом (ключ задается пользователем)

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!