Анимация
JavaScript
|
Главная Библионтека 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 - программа шифрования файлов. ==
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 |