+ -
当前位置:首页 → 问答吧 → 帮我看看程序,简易文件加密解密,为什么文件过大就不能加密解密,还有就是word、图片等不能解密

帮我看看程序,简易文件加密解密,为什么文件过大就不能加密解密,还有就是word、图片等不能解密

时间:2011-04-20

来源:互联网


;************************************主程序中用到的所有宏定义*********************************************************

fopen macro filename,type,handle ;打开文件的宏(文件名,属性,文件代号)
mov al,type
mov ah,3dH
lea dx,filename
int 21H
mov handle,ax
endm

pianyi macro handle ;改变文件读写指针(文件代号)
mov ah,42h
mov bx,handle
mov dx,0
mov cx,0
mov al,0
int 21h
endm

fwrite macro handle,buffer,size ;写文件的宏(文件代号,缓冲区偏移地址,要写的字节个数)
mov ah,40H
mov bx,handle
mov cx,size
lea dx,buffer
int 21H
endm  

fread macro handle,buffer,size ;读文件的宏(文件代号,缓冲区偏移地址,要读的字节个数)
mov ah,3fH
mov bx,handle
mov cx,size
lea dx,buffer
int 21H
endm  

fclose macro handle ;关闭文件的宏(文件代号)
mov ah,3eH
mov bx,handle
int 21H
endm

pause macro ;暂停的宏
mov ah,07H
int 21H
endm

quit macro ;返回DOS的宏
mov ax,4c00H
int 21H
endm

print macro msg ;提示信息的串输出宏
mov dx,offset msg
mov ah,09H
int 21H
endm

gets macro msg ;文件名的串输入宏
lea dx,msg
mov ah,0AH
int 21H
endm

;***************************************主程序开始**************************************************
;----------------------------------------数据段--------------------------------------------------
data segment
buffer db 512 dup(?) ;为文件内容数据准备的缓冲区
buf_size dw 512 ;缓冲区大小
finptr db 12,? ;输入文件名缓冲区前两个字节 
fname_in db 12 dup(?),? ;为文件名准备的缓冲区
handle_in dw ? ;输入文件代号
error1 db "open file error!",0dH,0aH,'$' ;出错提示信息
quit_msg db "press any key to continue...$"
in_msg1 db "input the source file name:",0DH,0AH,'$' ;输入提示信息
succmsg1 db "encry successfully!",0DH,0AH,'$'
succmsg2 db "decry successfully!",0DH,0AH,'$'
op_msg1 db 0DH,0AH ;提示信息
db "------ encry and decry -------",0DH,0AH
db "| 1-encry,2-decry,other-quit |",0DH,0AH
db "| please choice",0DH,0AH
db "|->",'$'
lines db 0DH,0AH,'$'
oprand db ? ;用户选择
readsize dw ? ;一次读入文件的字符个数
data ends

;-----------------------------------------代码段--------------------------------------------------------
code segment
  assume cs:code,ds:data,es:data
main proc far
start:
mov ax,data
mov ds,ax
mov es,ax
start_loop:
  print op_msg1 ;选择加解密提示信息
mov ah,01H ;键盘输入单字符
int 21H
mov oprand,al ;存放用户选择的值
print lines ;换行
  cmp oprand,'1' ;判断输入值
jz input_src_fname
cmp oprand,'2'
jz input_src_fname
jmp exit

input_src_fname: ;输入源文件名
print in_msg1 ;文件名的提示信息
gets finptr ;键盘输入文件
lea bx,fname_in ;文件名的首地址
mov al,finptr[1] ;缓冲区长度给al
mov ah,0
add bx,ax ;指针跳到该段内存的末地址
mov byte ptr [bx],0 ;
print lines ;换行

  fopen fname_in,2,handle_in ;打开文件
jnc lg
  print error1 ;打开失败提示
jmp start_loop

lg: cmp oprand,'2'
jz start_decry
start_encry:
call encryex ;调用加密子程序
jmp start_loop
start_decry:
call decryex ;调用解密子程序
jmp start_loop
exit:
print quit_msg ;结束提示消息
pause ;暂停
quit ;退出
main endp

;------------------------------------------加密模块--------------------------------------------

encryex proc near
mov ax,buf_size ;一次读入的最大字节数为512
mov readsize,ax

encryex_start:
fread handle_in,buffer,readsize ;读取源数据
mov readsize,ax
pianyi handle_in ;保存读取的个数
  call encry ;执行加密
  fwrite handle_in,buffer,readsize ;写加密数据
  cmp readsize,512
jb encryex_end ;读文件结束
jmp encryex_start

encryex_end: ;加密结束
print lines ;输出回车换行
fclose handle_in
print succmsg1
ret
encryex endp

;-------------------------------------------解密模块---------------------------------------------

decryex proc near
mov ax,buf_size ;一次读入的最大字节数为512
mov readsize,ax

decryex_start:
fread handle_in,buffer,readsize ;读取加密数据
mov readsize,ax
pianyi handle_in ;将指针移到文件头
call decry ;执行解密
fwrite handle_in,buffer,readsize ;写解密数据

cmp readsize,512
jb decryex_end ;读取完成
jmp decryex_start ;继续读取文件

decryex_end: ;解密结束
print lines ;输出回车换行
fclose handle_in
print succmsg2
ret
decryex endp

;------------------------------------------加密算法子程序-------------------------------------------

encry proc near ;加密算法
mov bx,0aah
mov cx,readsize
mov si,ax
encry_start:
  mov bh,[si]
  add bh,bl
  mov [si],bh
  inc si
loop encry_start
ret
encry endp

;--------------------------------------------解密算法子程序---------------------------------------
decry proc near ;解密算法 
mov bl,0aah
mov cx,readsize
mov si,ax
decry_start:
  mov bh,[si]
  sub bh,bl
  mov [si],bh
  inc si
loop decry_start
ret
decry endp
code ends
end start

;******************************************************************************************************
   
 






作者: pwzxcq889900   发布时间: 2011-04-20

恩,有时间会看看:D.

作者: va_zaixuexi   发布时间: 2011-04-20

能不能现在看看,帮帮忙,我明天要用,谢谢。

作者: pwzxcq889900   发布时间: 2011-04-20