;加密程序 (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
023.使用异或操作实现对称性加密以及解密
最新推荐文章于 2022-09-08 17:58:51 发布