Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2010, 19:03   #1
RAZOR1703
Пользователь
 
Регистрация: 15.12.2010
Сообщений: 74
По умолчанию [Ассемблер] Программа симметричного (или не очень) шифрования

Здравствуйте, товарищи программисты.
Пытаюсь делать курсовую по Асму, все немного печально. Задание - программа симметричного шифрования и дешифрования сообщения (с одним ключом). Само симм. шифрование я даже не представляю, как реализовать. Я даже с трудом понимаю, что это такое. Спросил у преподавателя - он разрешил упростить программу, но сказал, что оценка будет ниже.
Вобщем, я начал лепить программку шифрования через XOR (единственное, что до меня дошло ) и опять же столкнулся с проблемой. Я ввожу строку, считаю кол-во символов (для счетчика), начинаю цикл, применяя XOR к каждому символу по отдельности и записывая в esi. И все вроде бы проходит нормально, но вот дела: я не знаю как вывести полученный результат на экран. И вот на этом моменте я вспомнил про ваш сайт
Код:


Код:
.686
	.model flat,stdcall
	option casemap:none
	include C:\masm32\include\windows.inc
	include C:\masm32\include\masm32.inc
	include C:\masm32\include\kernel32.inc
	include C:\masm32\include\fpu.inc
	include C:\masm32\include\user32.inc
	includelib C:\masm32\lib\masm32.lib
	includelib C:\masm32\lib\user32.lib
	includelib C:\masm32\lib\kernel32.lib
	includelib C:\masm32\lib\fpu.lib
	BUFMAX equ 128
	KEY equ 213
	BSIZE equ 30
	.data
	inst db BUFMAX dup(?)
	str1 db "Vvedite soobschenie: ",0
	str2 db "Зашифрованный текст: ",0
	str3 db "Расшифрованный текст: ",0
	strsize DWORD ?
	stdout DWORD ?
	cWritten DWORD ?
	stdin DWORD ?
	cRead DWORD ?
	ec db BSIZE dup(0)
	buf db BSIZE dup(0)
	ifmt db "%u",0
	.code 
	_st:
	invoke GetStdHandle, STD_OUTPUT_HANDLE
		mov stdout, eax
	invoke GetStdHandle, STD_INPUT_HANDLE
		mov stdin, eax
	invoke WriteConsoleA,\
		stdout, ADDR str1, 21, 0, 0
	NewLine:
	invoke ReadConsole, stdin, ADDR inst, BUFMAX, ADDR cRead, NULL
		cmp cRead,2
		jnz NewLine
	invoke lstrlen, offset inst
	sub eax, 2

	mov ecx, eax
	xor esi,esi
	lea esi, inst
	L1:
		mov ebx,[esi]
		xor ebx,KEY
		mov [esi],ebx
		inc esi
		loop L1
	 
	invoke WriteConsoleA, stdout, esi, BUFMAX,0,0
	invoke Sleep, 10000d
	invoke ExitProcess,0
	end _st
Помогите, чем можете, пожалуйста.

А, и еще: друзья, если кому-то не составит труда поделиться кодом НАСТОЯЩЕГО симметричного шифрования, я буду очень благодарен вам.
Заранее спасибо
RAZOR1703 вне форума Ответить с цитированием
Старый 16.12.2010, 19:50   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

После цикла у вас esi уже не указывает на начало строки.
Вот это после цикла (Перед WriteConsole) ещё раз.
Код:
lea esi, inst
А зачем этот Sleep невменяемый в конце программы? Я честно говоря сначала подумал что она повисла.

Добавлено:
А вообще ошибок много:
1. в цикле идёт inc esi указателя, и почему то mov ebx, [esi]. Если работаете с байтами тогда уж mov bl, byte ptr [esi].
2. Вот это:
Код:
NewLine:
	invoke ReadConsole, stdin, ADDR inst, BUFMAX, ADDR cRead, NULL
	cmp cRead,2
	jnz NewLine
Т.е. из этого круга программа выйдет только если пользователь нажмёт Enter. Ну и у вас получится, что входная строка всегда будет начинаться с символов 0D 0A.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 16.12.2010 в 20:04.
Ulex вне форума Ответить с цитированием
Старый 16.12.2010, 20:01   #3
RAZOR1703
Пользователь
 
Регистрация: 15.12.2010
Сообщений: 74
По умолчанию

Ulex,
Огромное спасибо! Помогло, работает!!!

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

Еще раз спасибо!!!
RAZOR1703 вне форума Ответить с цитированием
Старый 16.12.2010, 20:26   #4
RAZOR1703
Пользователь
 
Регистрация: 15.12.2010
Сообщений: 74
По умолчанию

Цитата:
А вообще ошибок много
Туговато у меня с АСМом. Я стараюсь, как могу. Курсач-то сдать нужно

Так. Выпилил ожидание нажатия Enter и цикл у меня теперь выглядит так:

Код:
lea esi, inst
	L1:
		mov bl, byte ptr [esi]
		xor bl,KEY
		mov byte ptr [esi],bl
		inc esi
		loop L1
	 lea esi,inst
Правильно? Все работает, вроде.
EDIT:
Все, приделал, спасибо.

Последний раз редактировалось RAZOR1703; 16.12.2010 в 20:45.
RAZOR1703 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень срочно! Алгоритм шифрования DES... Regloger Помощь студентам 15 14.05.2013 17:04
[Ассемблер] Программа симметричного (или не очень) шифрования RAZOR1703 Помощь студентам 0 15.12.2010 17:05
Программа поиска в строке (string) самого длинного симметричного слова [Паскаль] Henkel Помощь студентам 2 14.12.2010 20:41
[Алгоритм] Симметричного шифрования tuxx32 Помощь студентам 6 13.05.2010 09:39