
15.05.2008, 22:59
|
|
Banned
Регистрация: 16.07.2007
Сообщений: 79
Провел на форуме: 801879
Репутация:
337
|
|
Assembler
Простейший алгоритм шифрования строк (для новичков) Тут же добавлю: усложняется знаниями асма (небольшими) и математики...
by Doberman
Немного теории...
Многие кодеры знают об уникальном свойстве реверсивности команды XOR:
если её выполнить дважды с одним и тем же операндом, то значение результата инвертируется.
А это значит, что мы можем воспользоваться свойством реверсивности операции
исключающего ИЛИ для выполнения простого шифрования данных.
В процессе шифрования исходная строка, введенная пользователем с клавиатуры,
преобразовывается в непонятный набор байтов с помощью другой строки, называемой ключом.
Зашифрованный текст можно сохранять или передавать адресату, не опасаясь, что кто-то сможет её прочитать.
Получив зашифрованный текст, авторизованный пользователь после дешифрования сможет прочесть первоначальный текст.
Ну с этим пока все просто... =)
Начнем...
Я приведу пример программы использующей метод симметричного шифрования,
т.е. для шифрования и расшифровки используется один и тот же ключ.
Опишу АЛГОРИТМ ПРОГРАММЫ:
* С клавиатуры вводится исходное сообщение.
* Программа в цикле выполняет шифрование каждого байта исходной строки.
___ с помощью одного и того же ключа, размером в один символ.
___ В результате получается зашифрованное. сообщение.
* Программа выполняет расшифровку сообщения и отображает расшифрованное.
Ну и собственно сама программа...
************************************************** *********************************************
Код:
TITLE Программа шифрования (Encrypt.asm)
Задаем значение ключа (от 1 до 255)
и максимальный размер буфера
Код:
INCLUDE Irvine32.inc
KEY = 239
BUFMAX = 128
Код:
.data
sPrompt BYTE "Введите исходное сообщение: ",0
sEncrypt BYTE "Зашифрованный текст: ",0
sDecrypt BYTE "Расшифрованный текст ",0
buffer BYTE BUFMAX dup(0)
bufSize DWORD ?
- вводим исходную строку
- зашифровываем
- отображаем
- расшифровываем
- отображаем
Код:
.code
main PROC
call InputTheString
call TranslateBuffer
mov edx, OFFSET sEncrypt
call DisplayMessage
call TranslateBuffer
mov edx, OFFSET sDecrypt
call DisplayMessage
exit
main ENDP
- выводим приглашение на ввод строки с клавиатуры.
- сохраняем строку и ее длину в соответствующих переменных
Код:
pushad
mov edx, OFFSET buffer
call WriteString
mov ecx, BUFMAN
mov edx, OFFSET buffer
call ReadString
mov bufsize, eax
call CrLf
popad
ret
InputTheString ENDP
- выводим на экран зашифр.- и расшифр.- ованную строки
Код:
pushad
call WriteString
mov edx, OFFSET buffer
call WriteString
call CrLf
call CrLf
popad
ret
DisplayMessage ENDP
Код:
TranslateBuffer PROC
- преобразуем строку, выполнив операцию ИСКЛЮЧАЮЩЕГО ИЛИ каждого байта
с обним и тем же целым числом, т.е. ключом
Код:
pushad
mov ecx, bufSize
mov esi, 0
L1:
xor buffer[esi], KEY
inc esi
loop L1
popad
ret
TranslateBuffer ENDP
END main
************************************************** *********************************************
|
|
|