Анимация
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

endenc;

mov laov mov raov int

jc jmp

ah, 40h

bx, outhndl

cx, dx

dx, buf

wrer

encode

exit:

mov mov int

inhndl

ah, bx, 21h cler ah, 3Eh bx, outhndl 21h cler

crer:

; Вывод сообщения об ошибке создания mov dx, OFFSET msgcrer call strout jmp exit

cler:

; Вывод сообщения об ошибке закрытия mov dx, OFFSET msgcler call strout jmp exit

rder:

; Вывод сообщения об ошибке чтения mov dx, OFFSET msgrder call strout jmp exit

wrer:

; Вывод сообщения об ошибке записи mov dx, OFFSET msgwrer call strout jmp exit

usage:

; Вывод сообщения об использовании mov dx, OFFSET msguse call strout jmp exit Процедура вывода сообщения

strout:

infile outfile txtkey inhndl outhndl keylen

msgcpy

mov int ret

ah, 0% 21h

Ошибка записи - на выход Закроем файлы

; Ошибка закрытия - на выход

; Ошибка закрытия - на выход ; Выход

DW DW

DH DW DW DB DB

О ; Адрес имени файла-источника

; Адрес имени файла-приемника

О ; Адрес текстового ключа

О ; Дескриптор файла-источника

; Дескриптор файла-приемника

О ; Длина ключа

О ; Переменная цикла шифрования

О ; Переменная цикла шифрования

RC4 Cryptor, ODh, OAh

•(с) Oleg V. Burdaev, 2001

nsgkey

nsgoper DB

•sgcrer DB

t.,sgcler DB

jsgrder DB

DB ODh, OAh, $

DB Usage: rc4.com

DB <src file> <dest file> /к: <key>

DB ODh, UAh, $

DB Invalid key, ODh, OAh, $

Can"t open file, ODh, OAh, $

Can"t create file, ODh, OAh, $

Can"t close file, ODh, OAh, $

Can"t read from file, ODh, OAh

DB $

jisgwrer DB Cant write to file, ODh, OAh

space: END begin

После запуска программы происходит разбор параметров командной строки. Первые три параметра преобразуются в ASCHZ строки, а их адреса помещаются в переменные INFILE, OUTFILE, TXTKEY соответственно. Затем происходит сравнение третьего параметра со строкой "/к", т. е. проверяется, является ли третий параметр допустимым и имеется ли достаточное количество параметров на входе, так как если их меньше трех, то адрес третьего параметра так и останется нулевым, как это определено изначально. При неправильном задании входных параметров происходит переход на процедуру вывода информации об использовании программы и завершения профаммы.

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

После завершении процедуры разворачивания ключа и перемешивания массива состояний (таблицы замен S-блока) открывается файл-источник и создается файл-приемник. Начинается цикл шифрования - из файла-источника считывается в буфер 1 бКб, происходят шифрование содержимого буфера и запись его в файл-приемник. Если после вызова функции чтения из файла получаем в АХ ноль, это означает, что файл считан до конца, и поэтому осуществляется выход из цикла. После завершения шифрования закрываются файлы и происходит выход из программы.



Приложение 4

Реализация алгоритма шифрования Rijndael

Шифрование осуществляется в режиме гаммирования (OFB). Входными параметрами программы являются имена входного и выходного файлов, а также файла-ключа, содержащего начальное значение состояния и ключ. Дополнительно могут указыватся размер блока (4, б, 8 - 128, 192 и 256 бит соответственно) и размер ключа (аналогично). По умолчанию размер блока и ключа приняты равными 4.

Алгоритм работы программы:

1) разбор параметров;

2) чтение данных в массив ключа;

3) генерация таблиц, необходимых для работы процедур цикла шифрования;

4) вычисляется число раундов шифрования;

5) открываются файл-источник и файл-приемник;

6) чтение из файла-источника блока данных;

7) генерация нового состояния;

8) сложение по модулю два блока данных и нового состояния и запись результата в файл-приемник;

9) повторение шагов 6-8 до тех пор, пока не будет исчерпан файл-источник;

10) закрытие файлов;

11) завершение программы

Приложение 4. Реализация алгоритма шифрования Rijndael

Разбор параметров

==== rijndael.asm - программа шифрования файлов. ==

. 286

. MODEL

tiny

. CODE

lOOh

ptbl

OFFSET tables

pitbl

OFFSET tables+lOOh

sbox

OFFSET tables+200h

sibox

OFFSET tables+300h

rcon

OFFSET tables+400h

state

OFFSET tables+420h

tstate

OFFSET tables+440h

OFFSET tables+460h

buff

OFFSET tables+640h

begin:

dx, OFFSET msgcpy

call

strout

xor mov

eld mov inc mov mov

xor mov

bx, bx bl, ds:

[80h]

cx, cx

di, 81h

BYTE PTR [bx+81h], 2 Oh

si, si al, 20h

Получим длину "хвоста" команды

Пробел в конец строки

Найдем в командной строке адреса первых 5 параметров

Sparams: repe

repne

Separam:

scasb

scasb

dx, 5

cx, cx @eparam

[infile+si], di WORD PTR [infile+si]

BYTE PTR [di-1]

si, 2

cx, cx

Separam

@params

; Проверим, есть ли хотя бы 3 параметра cmp keyfile, О

jnz @paramsok jmp @usage ; Разбор параметров, определяющих ; размер ключа и массива состояния Sparamsok:

@pkb:

jz cmp

bx, keyn bx, 0 @parok

WORD PTR [bx].

; Нет ключа - параметры ; по умолчанию

; Модификация размера ключа

jz @ргоскк

cmp WORD PTR [bx], b/ ; Модификация размера массива состояния

ipar2:

8prockk:

3Z jmp

cmp jz mov jmp

mov cmp jz cmp

@procbk iusage

bx, blkn @parok bx, blkn @pkb

al, BYTE PTR al, 4 @setk al, 6

[bx+3]



@setk:

gprocbk:

@setb:

@parok:

and mov jmp

and mov jmp

Неправильная длина ключа

@setk al, S-@setk @invkey

ax, OEh nk, ax @par2

al, BYTE PTR [bx+3]

@setb

al, "6

@setb

al, 8

ginvblk ; Неправильная длина блока

ax, OEh nb, ax @par2

• Чтение ключевой информации call Srdkey

; Генерация таблиц

call genptbl call gensbox call genrcon

; Вычисление числа раундов

mov mov mov cmp jae mov

ax, WORD PTR nb WORD PTR nr, ax ax, WORD PTR nk WORD PTR nr, ax @nrok

WORD PTR nr, ax

@nrok:

teloop:

add WORD PTR nr. Расширение ключа

call keyexpansion Открытие файлов

call @openin

call @openout Цикл шифрования

Чтение из файла

mov ah, 3Fh

bx, inhndl cx, nb cx, 2 dx, buff 21h @rdok grder

@rdok:

mov mov shl mov int jnc jmp

Генерация очередного блока состояния

gerounds:

mov call

mov dec

push call call call call pop loop

WORD PTR k, addroundkey

cx, cx

WORD PTR nr

: Обнулим указатель ключа ; Сложим массив состояния ; с ключом Цикл генерации состояния

bytesub

shiftrow

mixcolumn

addroundkey

Serounds

Последний такт цикла генерации

call call call Сложим буфер mov shl mov

8xor:

bytesub shiftrow addroundkey с массивом состояний bx, nb bx, 2 dx, bx

Swrok:

8endenc:

mov xor dec jns

Сохраним буфер mov mov mov

int jnc jmp

юov shl cmp

al, state[bx] buff[bx], al bx @xor

ah, bx, cx, dx,

@wrok

@wrer

outhndl read buff

ax, ax, ax.

nb 2

read

@mloop

Проверим, не достигнут ли ; конец файла

Закрытие файлов

9exit:

raov mov int mov mov int

ah, bx, 21h ah, bx, 2lh

inhndl 3Eh

outhndl

ax, ax jz Sendenc

mov read, ax

; Ошибка чтения - на выход

; Конец файла - на выход ; Сохраним число

; считанных байт

. J, 1111. vn

jj.j°4eflypa загрузки ключевых данных

Выход из программы

Откроем файл mov mov int

ах, 3D00h dx, keyfile 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