Анимация
JavaScript
|
Главная Библионтека 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
Функция установки указателя Дескриптор файла Смещение от начала файла Старшая половина указателя Младшая половина указателя Вызов функции Дескриптор Длина записываемой строки ; Адрес строки 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. Скен-Скен-к
коды клавиш з шестнадцатеричной форме записи и код"" содержит код нажатия или отпускания (соответственно 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 < и
Put. 1.2.6. Старшие (информационные) байты расширенных кодов ASCII в шестнадцатеричной форме записи: а - при нажатии одной клавиши; б - при нажатии Shift/клавиша
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 |