Показать сообщение отдельно

  #6  
Старый 15.05.2008, 22:59
Dober'man
Banned
Регистрация: 16.07.2007
Сообщений: 79
Провел на форуме:
801879

Репутация: 337
Отправить сообщение для Dober'man с помощью ICQ
По умолчанию

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
Код:
InputTheString PROC
- выводим приглашение на ввод строки с клавиатуры.
- сохраняем строку и ее длину в соответствующих переменных


Код:
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
Код:
DisplayMessage PROC
- выводим на экран зашифр.- и расшифр.- ованную строки

Код:
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
************************************************** *********************************************
 
Ответить с цитированием