问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

简易加密解密程序

发布网友 发布时间:2022-04-28 15:41

我来回答

1个回答

热心网友 时间:2022-06-19 12:09

; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
push dx
lea dx,Str_Addr
mov ah,9
int 21h
pop dx
EndM
; -----------------------------------------
; 功能:打开指定路径下的文件。若打开成功,保存文件代号,设置进位标志;
; 否则,建立文件,保存文件代号,清进位标志
; 入口参数:dx=文件名地址,bx=文件代号保存地址
Open_File Proc Near
mov ax,3d02h ;以读写方式打开文件
int 21h
jc @@Error
mov [bx],ax ;成功打开,保存文件代号
stc ;设置进位标志
ret
@@Error: Output Open_Error
xor cx,cx ;新建文件属性
Create_File:mov ah,3ch ;建立文件
int 21h
jc Create_File ;建立不成功,尝试再建
mov [bx],ax ;成功建立,保存文件代号
clc ;清进位标志
ret
Open_File EndP
; -----------------------------------------
; 功能:对字符串缓冲区中的内容逐个字符加密
; 入口参数:si=字符串地址,cx=字符数
Encode_Str Proc Near
push si
push cx
lea di,Handle_File
mov al,[di][88] ;读取密钥
@@Encoding: xor byte ptr [si],al ;异或,第一步加密
push cx
mov cx,188
rol byte ptr [si],cl ;循环左移188位,第二步加密
pop cx
inc si ;下一个字符地址
loop @@Encoding ;处理下一个字符
pop cx
pop si
ret
Encode_Str EndP
; -----------------------------------------
; 功能:对字符串缓冲区中的内容逐个字符加密
; 入口参数:si=字符串地址,cx=字符数
Uncode_Str Proc Near
push si
push cx
lea di,Handle_File
mov al,[di][88] ;读取密钥
@@Uncoding: push cx
mov cx,188
ror byte ptr [si],cl ;循环右移188位,第一步解密
pop cx
xor byte ptr [si],al ;异或,第二步解密
inc si ;下一个字符地址
loop @@Uncoding ;处理下一个字符
pop cx
pop si
ret
Uncode_Str EndP
; -----------------------------------------
Handle_File dw ?,?,? ;文件代号
File_Name1 db 'c:\masm\rory00.txt',0 ;未加密的文本文件
File_Name2 db 'c:\masm\rory01.txt',0 ;加密后的文本文件
File_Name3 db 'c:\masm\rory02.txt',0 ;解密后的文本文件
Open_Error db 'Open file error,creat a new file.',13,10,13,10,7,'$'
Input_New db 'Input the new information:',13,10,'$'
Press_Key db 13,10,13,10,'The Encode and Uncode have been completed.',7
db 13,10,13,10,'Press any key to exit...$'
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
; -----------------------------------------
; 打开或建立三个文件
lea dx,Buffer ;文本内容处理缓冲区
mov cx,0ffc0h ;预留32个字的堆栈空间
sub cx,dx ;设置读写一次文件内容的字节数
mov bp,cx ;暂存
lea dx,File_Name2 ;文件名地址
lea bx,Handle_File[2] ;文件代号保存地址
call Open_File ;打开指定路径下的文件。若打开成功,保存文件代号;否则,建立文件,保存文件代号
lea dx,File_Name3 ;文件名地址
lea bx,Handle_File[4] ;文件代号保存地址
call Open_File
lea ax,@@jump000
push ax
call @@Locate_01
@@Locate_00:lea dx,File_Name1 ;文件名地址
lea bx,Handle_File ;文件代号保存地址
call Open_File
jc Read_File
; -----------------------------------------
; 若是新建文件,输入文件内容,实施加密,写到另一个文件
Input_Str: Output Input_New ;提示输入新信息
lea dx,Buffer ;文本内容处理缓冲区
mov ah,0ah ;键盘输入字符串
int 21h
lea si,Buffer[1] ;实际输入的字符个数地址
lodsb ;读取实际输入的字符数
test al,0ffh
jz Input_Str ;若直接回车,未输入任何字符,再次提示输入新信息
mov dx,si ;数据缓冲区地址
mov cl,al ;实际输入的字符数
xor ch,ch
mov bx,Handle_File ;读取未加密的文本文件代号
Write_Uncod:mov ah,40h
int 21h
jc Write_Uncod ;写入失败,尝试再写
call Encode_Str ;逐个字符加密
mov dx,si ;数据缓冲区地址,要写入的字符数已在cx中
mov bx,Handle_File[2] ;文件代号
Write_Coded:mov ah,40h
int 21h
jc Write_Coded ;写入失败,尝试再写
jmp @@Uncode
@@Locate_01:pop ax
ret
; -----------------------------------------
; 若成功打开文件,读取文件内容,实施加密,写到另一个文件
Read_File: lea dx,Buffer ;文本内容处理缓冲区
mov cx,bp
mov bx,Handle_File ;读取未加密的文本文件代号
mov ah,3fh ;读文件内容
int 21h
jc Read_File ;读文件失败,尝试再读
test ax,0ffffh
jz @@Uncode ;若实际读取的字节数为0,结束读写操作
lea si,Buffer
mov cx,ax
call Encode_Str ;逐个字符加密
mov dx,si ;数据缓冲区地址,要写入的字符数已在cx中
mov bx,Handle_File[2] ;读取目标文件代号
Write_File: mov ah,40h ;写文件
int 21h
jc Write_File ;写文件失败,尝试再写
jmp Read_File
; -----------------------------------------
; 修改子程序Encode_Str和Encode_Str中的循环移位次数
@@jump000: mov byte ptr Encode_Str[13],6
mov byte ptr Uncode_Str[11],6
lea ax,@@Locate_00
push ax
call @@Locate_01
; -----------------------------------------
; 将加密完的内容解密,写入第三个文本文件
@@Uncode: xor dx,dx
xor cx,cx
Loca_Seek1: mov bx,Handle_File[4] ;读取解密后的文本文件代号
mov ax,4200h ;移动文件指针至文件头
int 21h
jc Loca_Seek1
Loca_Seek2: mov bx,Handle_File[2] ;读取加密后的文本文件代号
mov ax,4200h ;移动文件指针至文件头
int 21h
jc Loca_Seek2
lea dx,Buffer ;文本内容处理缓冲区
Read_File1: mov cx,bp
mov bx,Handle_File[2] ;读取加密后的文本文件代号
mov ah,3fh ;读文件内容
int 21h
jc Read_File1 ;读文件失败,尝试再读
test ax,0ffffh
jz Close_File1 ;若实际读取的字节数为0,结束读写操作,关闭文件
lea si,Buffer
mov cx,ax
call Uncode_Str ;逐个字符解密
mov dx,si ;数据缓冲区地址,要写入的字符数已在cx中
mov bx,Handle_File[4] ;读取解密后的文本文件代号
Write_File1:mov ah,40h ;写文件
int 21h
jc Write_File1 ;写文件失败,尝试再写
jmp Read_File1
Close_File1:mov bx,Handle_File ;读取未加密的文本文件代号
mov ah,3eh ;关闭文件
int 21h
jc Close_File1
Close_File2:mov bx,Handle_File[2] ;读取加密后的文本文件代号
mov ah,3eh ;关闭文件
int 21h
jc Close_File2
Close_File3:mov bx,Handle_File[4] ;读取解密后的文本文件代号
mov ah,3eh ;关闭文件
int 21h
jc Close_File3
Output Press_Key ;提示操作完成,按任意键结束程序
mov ah,1
int 21h
Exit_Proc: mov ah,4ch ;结束程序
int 21h
ALIGN 10h ;节对齐
Buffer db 255 ;文本内容处理缓冲区
Code ENDS
END Start ;编译到此结束
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怀孕甲状腺激素偏高正常吗 怀孕检查甲状腺素偏高是什么原因引起的 怀孕了甲状腺功能偏高是怎么回事 怀孕甲状腺高是什么引起的 孕中期促甲状腺激素偏高是什么原因 重钢别墅靠谱吗 重刚别墅的致命缺点 重钢别墅的优点和缺点各是什么 积食可以吃什么 车子换了点火线圈,分缸线,火花塞以后车子打不着。这是什么原因 小弟请教各位大侠~怎么用flashgamemaster3.0修改金庸群侠传3加强版 jzdl是什么文件的后缀? vcs的格式怎么打开,是手机导到电脑的格式 金庸群侠传2加强版通关后生成的金3超强存档有什么用啊,那四个选项都是给什么的 13jz是什么文件格式 如何在广联达软件中导入ECBTFile 工程量清单,13jz文件用什么软件打开 13jz格式文件如何打开? dom事件中target和currenttarget的区别 .13jz是什么文件格式,怎么打开? 13jz后缀文件怎么打开 待把相思诉QQ汽泡如何免费或得? 求一个qq气泡名字, 金华到昆明的火车有几辆啊 从银川市到营口市坐火车怎么倒车 北京到辽宁鞍山的火车怎么找 西柳站的列车时刻表 北京至海城火车时刻表 京津最新城际列车时刻表 从廊坊到昌黎坐火车怎么走? 广联达GCCP5.0如何接受13JK 李俊基 个人资料 求 拳皇13出招表.要2P的.WASDjkui键盘的 在linux的终端里,进入不到硬盘,也看不到文件夹。ls后只出现我刚建立的文件夹。 linux挂载了一块硬盘以后不能启动了 标注容量为256g的固态硬盘 实际容量应该为多少 刚买的电脑256g固态硬盘,那我的电脑有多大容量呢? 可以升级吗?(加机械硬盘之类的可以吗) 影驰256g固态硬盘的尺寸是305×244吗? 神舟笔记本,G6 SL7S2 固态硬盘256g,请问一下硬盘到底有多大,是不是一个t 固态硬盘256G和240G有什么区别么 同样大小比如256G固态硬盘要比普通256G硬盘存储容量大吗? win10固态硬盘256分多大合适 定*务人才培育人力共享平台APP商业计划书路演融资PPT模板范本 如何写好天使轮融资的商业计划书 华为nova7手机怎么样才能把数据传输到小米11里面? 给闺蜜在美团上买蛋糕怎么才能做到引人注目呢? 如何提高美团和饿了么上的人气 美团团购优惠如何可以让更多人知道? 怎么让别人更容易搜到你的美团 为什么那么多人使用美团