Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 [ 7 ] 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

FDescr DW

; Ячейка для хранения ; дескриптора файла

Begin:

;===== Сегмент кода =========================================

. CODE

; Инициализация сегментного регистра DS

mov ах, @data

mov ds, ах ; Вывод строки с запросом на ввод имени файла

mov ah, 40h ; Функция записи

mov bx, 1 ; Дескриптор стандартного вывода

mov СХ, MesslLen ; Длина строки raov dx, OFFSET Messagel

; Адрес строки int 21h ; Вызов функции

; Ввод имени файла

mov ah, 3fh ; Функция чтения

хог bx, bx ; Дескриптор стандартноо ввода

mov СХ, 30 ; Столько читать \

raov dx, OFFSET FileName \

; Адрес буфера int 21h ; Вызов функции

raov bx, ax ; Формирование строки

sub bx, 2 ; с именем файла в формате ASCIIZ

mov FileName[bx], О ; Вывод строки с запросом на ввод пароля mov ah, 40h ; Функция записи

raov bx, 1 ; Дескриптор стандартного вывода

mov сх, Mess2Len ; Длина строки raov dx, OFFSET Message2

; Адрес строки int 21h ; Вызов функции

; Ввод пароля

raov ah, 3fh ; Функция чтения

хог bx, bx ; Дескриптор стандартного ввода

raov сх, 80 ; Столько читать

mov dx, OFFSET Password

; Адрес буфера int 21h ; Вызов функции

; Хеширование пароля - формирование контрольной сушы пароля raov si, OFFSET Password

; Адрес входной последовательности

; байтов пароля

хог al, al ; Инициализация регистра, в котором

; будет формироваться ; хеш-образ пароля

raov сх, 80 ; Длина строки

loop mov

Открытие файла mov mov mov

al, [si] ; Формирование в AL, текущего

; значения контрольной суммы si ; Формирование в SI адреса

; очередного байта входной ; последовательности NextBytel ; Повторить цикл 80 раз

Key, al ; Хеш-образ последовательности

; байтов пароля - ключ шифра

ah, al, dx.

3dh 2

OFFSET FileNarae

Функция открытия файла

Доступ для чтения/записи

int 21h mov FDescr, Чтение файла mov mov mov mov

int raov

Шифрование содержимого буфера mov сх, FileLen

mov si, OFFSET Buf

Адрес имени файла

в формате ASCIIZ

Вызов функции

Получили дескриптор файла

ah, 3fh ; Функция чтения файла

bx, FDescr ; Дескриптор

сх, 4096; Столько читать

dx, OFFSET Buf

21h FileLen, ax

Адрес входного буфера

Вызов функции

Столько реально прочитали

Длина файла - число циклов шифрования байта

NextByte2:

mov хог inc

al. Key ; [si], al; si

loop NextByte2

Установка указателя на начало файла

; Адрес буфера, содержащего ; входную информацию Ключ шифра

Такт шифрования очередного бай:

; Формирование адреса очередного ; байта входной последовательности Повторять FileLen раз

ah, 42h

<ix- dx

FDescr

cx ;

в файл

4 Oh ; Функция

FDescr

FileLen

OFFSET Buf

Функция установки указателя Дескриптор файла Смещение от начала файла Старшая половина указателя Младшая половина указателя Вызов функции

Дескриптор

Длина записываемой строки



; Адрес строки

int 21h ; Вызов функции

; Закрытие файла

mov ah, 3eh ; Функция закрытия файла

mov bx, FDe.scr ; Дескриптор

int 21h ; Вызов функции

; Завершение программы

mov ah, 4ch ; Функция завершения,

xor al, al ; код возврата - О

int. 21h ; Вызов функции

END Begin ; Точка входа

; Примечание.

; В программе используются простейшие алгоритмы хеширования

; и шифрования, не обеспечивающие даже минимального уровня защиты.

• Качественные алгоритмы будут рассмотрены в главе 2. >

Инициализация сегментного регистра DS

Вывод на экран запроса на ввод имени файла

Хеширование пароля и определение ключа

Ожидание ввода с клавиатуры

Ввод имени файла -"1

Открытие файла i

Чтение содержимого файла в буфер

Вывод на зкраи запроса на ввод пароля

Ожидание ввода с клавиатуры

Ввод пароля

Шифрование файла 1

Запись содержимого буфера обратно в файл

Закрытие файла 1

Завершение программы

Рис. 1.2.4. Алгоритм работы программы шифрования файлов

Задания для самостоятельной работы

1) гТредусмоФ шифрование файлов произвольного объема, например, за счет считывания файла в буфер Buf по частям. Для определения длины файла можно воспользоваться, например, функцией установки указателя.

2) Предусмотреть реакцию на неправильные действия пользователя (ввод имени несуществующего файла и т. п.).

3) Реализовать процедуры ввода и вывода строк с использованием соответственно функций OAh и 09h прерывания INT 2Ih.

4) Организовать ввод пароля без эха. Организовать двукратное запрашивание пароля.

5) Предусмотреть возможность шифрования всех файлов текущей директории.

1.2.10. Ввод-вывод информации 1.2.10.1. Ввод информации с клавиатуры

Каждое нажатие или отпускание клавиши приводит к генерации 8-разрядного скеи-кода и последующей записи в буфер клавиатуры 16-разрядного кода, соответствующего нажатой клавише (или комбинации клавиш) (рис. 1.2.5).


1-2.5. Скен-Скен-к

Num tock

Home

PgUp

Enter

0«l

коды клавиш з шестнадцатеричной форме записи

и код"" содержит код нажатия или отпускания (соответственно 1 и 0) в старшем разряде назк"Фикатор клавиши в оставшихся разрядах. Скен-код однозначно указывает на aiff клавишу, однако не позволяет определить, какие буквы, латинские или русские, вво-пп °> работает ли он на нижнем или верхнем регистре. Каждое нажатие на кла-сб\л«, к генерации 8-разрядного АБСП-кода соответствующего символа. Наряду

Цифрами и другими знаками, набор символов ASCII содержит и управляющие



символы, например символ возврата каретки CR (ODh) и перехода на следующую строку LF (OAh). За каждой клавишей, служащей для ввода отображаемых символов, закреплено несколько ЛЗСП-кодов. Для однозначного определения кода вводимого символа необходимо анализировать и запоминать факты нажатия управляющих клавиш Shift, Ctrl, Alt, Caps Lock и другие. При нажатии на клавишу (или комбинацию клавиш), соответствующую отображаемому символу, в буфер клавиатуры помещается слово, старший байт которого - это скен-код клавиши, а младший - ASCII-код соответствующего символа. При нажатии на клавишу (или комбинацию клавиш), которая не имеет соответствующего отображаемого символа, при нажатии на алфавитно-цифровую клавишу в комбинации с клавишей Alt в буфер клавиатуры заносится 16-разрядный так назьгеаемый расширенный ASCII-код (рис. 1.2.6 и 1.2.7). Младший байт этого кода всегда нулевой.

1 г J < и

Home

PgUp

PgDn

1. 7

Ops Lock

Enter

Shift

Shift

Ctrl

Ctri

-*

Prt Scr

Scr Lock

Pause

Home

PgUp

PgDn

Hum Lock

Home

9 PjOp

PgDn

Enter

Num Lock

Ноям

PgUp

1 End

PgDn

Put. 1.2.6. Старшие (информационные) байты расширенных кодов ASCII в шестнадцатеричной форме записи:

а - при нажатии одной клавиши; б - при нажатии Shift/клавиша


Home

PgUp

0

73 4

75 I

г "\

PgDn

Enter

Lock

Home

PgUp

1 End

PgDn

Enter

Put. 1.2.7. Старшие (информационные) байты расширенных кодов ASCII в шестнадцатеричной форме записи:

а - при нажатии Ctrl/клавиша; б - при нажатии Л11/клавиша

Ввод информации с клавиатуры можно осуществить одним из трех способов:

использование файловой функции DOS 3Fh с помощью прерывания 1NT 21h (см. раздел 1.2.8);

использование группы функций ввода-вывода DOS с номерами из диапазона Olh ... OCh с помощью прерывания FNT 21h;

обращение к драйверу клавиатуры с помощью прерывания ГМТ 16h. Рассмотрим некоторые функции DOS, вызываемые по прерыванию ГЫТ 21h.



0 1 2 3 4 5 6 [ 7 ] 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88