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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章