023.使用异或操作实现对称性加密以及解密

;加密程序			(Encrypt.asm)
include irvine32.inc
KEY=239								;1~255之间的任何一个值
BUFMAX=128							;缓冲区最大容量

.data
	sPrompt		BYTE	"Enter a plain text:",0
	sEncrypt	BYTE	"Cipher text       :",0
	sDecrypt	BYTE	"Decrypted         :",0
	buffer		BYTE	BUFMAX+1	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 		;显示解密信息
		call WaitMsg				;
		exit						;
	main ENDP

	;--------------------------------------------
	InputTheString proc
	;
	;提示用户输入一个纯文本字符串
	;保存字符串和他的长度
	;接受:无
	;返回:无
	;--------------------------------------------
	pushad							;保存32位寄存器
	mov edx,OFFSET sPrompt			;显示提示
	call WriteString				;
	mov ecx,BUFMAX					;字符计数器最大值
	mov edx,OFFSET buffer			;指向缓冲区
	call ReadString					;输入字符串
	mov bufSize,eax					;保存长度
	call Crlf
	popad
	ret
	InputTheString ENDP

	;--------------------------------------------
	DisplayMessage PROC
	;显示加密或者解密信息
	;接受:EDX指向消息
	;返回:无
	;--------------------------------------------
	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;						;缓冲区索引赋初值0
	L1:
		xor	buffer[esi],KEY			;转换一个字符
		inc esi						;指向下一个字节
		loop L1
	popad
	ret
	TranslateBuffer ENDP
END main
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章