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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值