⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encrypt.asm

📁 汇编语言程序编写的用于文件内容的加密和解密程序.
💻 ASM
字号:
data SEGMENT
    cps DB 255 DUP(0)  ;正确的密码
    psf DB 0           ;密码标志位
    cpslen DB ?        ;c ps len
    fname LABEL BYTE   ;file name
      fmaxlen DB 254
      flen DB ?
      pathstr DB 254 DUP(' ')
    hinfo DB 255 DUP (?)   ;head info
    hf DB 0            ;head info flag
    endf DB  0         ;exit flag 
    fhandle DW  ?      ;file handle
    password LABEL BYTE  
      pwmaxlen DB 254
      pslen DB ?
      psstr DB 254 DUP (?)
    rcount DW ?        ;read count
    buf DB  255 DUP(0) ;buffer
    bufend DB '$'
    endl DB 0dh,0ah,'$'
    error DB 'error',0dh,0ah,'$'
    intr DB '******************************************************************************',0dh,0ah
         DB '    File encryption/decryption System       2000 CS 3  Wufan 00204083        ' ,0dh,0ah   
         DB '******************************************************************************',0dh,0ah,'$'
    inputps DB 'Please input password:$'
    message1 DB 'The file is encrypted!  Need password!$'
    message2 DB 'The file content is ......',0dh,0ah,'$'
    message3 DB 'Would you want to encrypt the file?(y/n) $'
    openfailed DB 'open failed',0dh,0ah,'$'
    readfailed DB 'read failed',0dh,0ah,'$'
    succes DB 'The file is encrypted successfully!$'
    message4 DB 'please input the filename:$'
data ENDS

code SEGMENT
start PROC FAR
ASSUME CS:code,DS:data

    MOV AX,data
    MOV DS,AX
    MOV ES,AX
    LEA DX,intr
    CALL outstr
    LEA DX,message4
    CALL outstr
    CALL fnamein
    CMP endf,0
    JNZ exit
    CALL fopen
    CMP endf,0
    JNZ exit
    CALL hinfor
    CMP hf,1
    JE s1
    LEA DX,message2
    CALL outstr
    CALL display
    LEA DX,endl
    CALL outstr
    LEA DX,message3
    CALL outstr
    MOV AH,01
    INT 21h
    CMP AL,121
    JNE exit
    MOV AH,09h
    LEA DX,endl
    INT 21h
    CALL encrypting
    JMP exit 
s1:
    LEA DX,message1
    CALL outstr
    LEA DX,endl
    CALL outstr
    CALL encrypted    
exit:
    MOV AX,4c00h
    INT 21h
start ENDP

encrypting PROC NEAR   
    MOV AH,42h
    MOV AL,00
    MOV BX,fhandle
    XOR CX,CX
    XOR DX,DX
    INT 21h
    JC e3
    CALL psin
    CMP endf,0
    JNZ e3
    CALL mkhinfo
e1:
    CALL fread
    CMP endf,0
    JNZ e2
    CALL encrypt
    CALL bufw    
    JMP e1  
e2:
    CALL hinfow
    LEA DX,succes
    CALL outstr
e3:     
    RET
encrypting ENDP    

display PROC NEAR    ;display the file content
    MOV AH,42h
    MOV AL,00
    MOV BX,fhandle
    XOR CX,CX
    XOR DX,DX
    INT 21h
    JC d1
d2:
    CALL fread
    CMP endf,0
    JNZ d1
    CALL printbuf
    JMP d2
d1:
    MOV endf,0
    RET
display ENDP

encrypted PROC NEAR   
    MOV CX,3
ec1:    
    CALL psin
    CMP endf,0
    JNZ ec2
    MOV SI,0
    XOR BL,BL
    MOV BL,cpslen
    CMP BL,pslen
    JNE ec2
ec3:    
    MOV AL,psstr[SI]
    CMP AL,cps[SI]
    JNZ ec2
    INC SI
    CMP SI,BX
    JNZ ec3
    MOV psf,1
    JMP ec4
ec2:
    LOOP ec1
ec4:
    CMP psf,1
    JNE ec7        
    MOV AH,42h
    MOV AL,00
    MOV BX,fhandle
    XOR CX,CX
    XOR DX,DX
    INT 21h
    JC ec6
ec5:
    CALL fread
    CMP endf,0
    JNZ ec6
    MOV SI,254
    MOV AL,buf[SI]
    CMP AL,255
    JE ec5
    CALL encrypt
    CALL printbuf
    JMP ec5
ec7:
    CALL display
ec6:
    RET
encrypted ENDP

printbuf PROC NEAR  ;print buffer
    LEA DX,buf
    CALL outstr
    RET
printbuf ENDP 

fnamein PROC NEAR  ;input filename
    MOV AH,0ah
    LEA DX,fname
    INT 21h
    LEA DX,endl
    CALL outstr
    CMP flen,0
    JNE fni1
    LEA DX,error
    CALL outstr
    MOV endf,01h
    RET
fni1:     
    XOR AX,AX
    MOV AL,flen
    MOV DI,AX
    MOV pathstr[DI],AH
    RET
fnamein ENDP

psin PROC NEAR  ;input password
    LEA DX,inputps
    CALL outstr
    MOV AH,0aH
    LEA DX,password
    INT 21h
    LEA DX,endl
    CALL outstr
    CMP pslen,0
    JE ps1
    RET
ps1:     
    LEA DX,error
    CALL outstr
    MOV endf,01h
    RET
psin ENDP

fopen PROC NEAR     ;open file 
    MOV AH,3dh
    MOV AL,02h
    LEA DX,pathstr
    INT 21h
    JC f1
    MOV fhandle,AX
    RET
f1:
    MOV endf,01h
    LEA DX,openfailed
    CALL outstr
    RET
fopen ENDP

bufw PROC NEAR
    MOV BX,fhandle
    MOV CX,0
    MOV DX,0
    SUB DX,rcount
    CMP DX,0
    JGE bw2
    NOT CX
bw2:     
    MOV AL,1
    MOV AH,42h
    INT 21h
    JC bw1
    LEA DX,buf
    MOV AH,40h
    MOV CX,255
    INT 21h
    JC bw1
    CMP AX,255
    JNE bw1    
    RET
bw1: 
    LEA DX,error
    CALL outstr
    MOV endf,01h
    RET
bufw ENDP

fread PROC NEAR    ;file read
    MOV AH,3fh
    MOV BX,fhandle
    MOV CX,255
    LEA DX,buf
    INT 21h
    JC fr1
    CMP AX,0
    JE fr3
    MOV rcount,AX
    CMP rcount,255
    JE fr4
    MOV SI,rcount
    MOV buf[SI],36
fr4:
    RET
fr1:  
    LEA DX,readfailed
    CALL outstr
    JMP fr3
fr3:     
    MOV endf,01h
    RET
fread ENDP

mkhinfo PROC NEAR ;make head info
    XOR AX,AX
    MOV AL,flen
    MOV DI,AX
    DEC DI
    MOV AL,pathstr[DI]
    MOV SI,0h
    MOV hinfo[SI],AL
    MOV CL,pslen
mh1:
    MOV AL,psstr[SI]
    XOR hinfo[SI],AL
    MOV AL,hinfo[SI]
    INC SI
    MOV hinfo[SI],AL
    LOOP mh1
    MOV AL,255
    MOV SI,254
    MOV hinfo[SI],AL
    DEC SI
    MOV AL,pslen
    XOR AL,255 
    MOV hinfo[SI],AL  
    RET
mkhinfo ENDP

hinfor PROC NEAR  ;read head info
    MOV AH,42h
    MOV AL,2
    MOV BX,fhandle
    XOR CX,CX
    MOV DX,-2
    NOT CX
    INT 21h
    LEA DX,cps
    MOV AH,3fh
    MOV CX,2
    INT 21h
    JC hr2
    CMP AX,2
    JNE hr2
    MOV SI,1
    MOV AL,cps[SI]
    CMP AL,255
    JNE hr2
    MOV hf,1
    DEC SI
    MOV CL,cps[SI]
    XOR AL,CL
    MOV cpslen,AL
    XOR CX,CX
    NOT CX
    MOV DX,-255
    MOV AH,42h
    MOV AL,2
    INT 21h
    JC hr1
    LEA DX,cps
    MOV AH,3fh
    MOV CX,255
    INT 21h
    JC hr2
    CMP AX,255
    JNE hr2
    XOR CX,CX
    MOV CL,cpslen
    DEC CL
    MOV SI,CX
    MOV DI,CX
    DEC DI
hr3:
    MOV AL,cps[DI]
    XOR cps[SI],AL
    DEC DI
    DEC SI
    LOOP hr3
    XOR CL,CL
    MOV CL,flen
    MOV DI,CX
    DEC DI
    MOV AL,pathstr[DI]
    MOV SI,0
    XOR cps[SI],AL
    RET     
hr2:
    MOV hf,0
    RET
hr1:
    MOV endf,1
    LEA DX,error
    CALL outstr
    RET    
hinfor ENDP

outstr PROC NEAR   ;output string
    MOV AH,09h
    INT 21h
    RET
outstr ENDP    

encrypt PROC NEAR   ;encrypt the buffer
    MOV CX,255
    XOR BX,BX
    MOV BL,pslen
    MOV SI,0h
    MOV DI,0h
ecd1:
    CMP DI,BX
    JNE ecd2
    MOV DI,0h 
ecd2:
    MOV AL,psstr[DI]
    XOR buf[SI],AL
    INC DI
    INC SI
    LOOP ecd1
    RET
encrypt ENDP

hinfow PROC NEAR  ;write the head info 
    MOV AH,42h
    MOV AL,2
    MOV BX,fhandle
    MOV CX,0
    MOV DX,0                
    INT 21h
    JC hw1
    LEA DX,hinfo
    MOV AH,40h
    MOV CX,255
    INT 21h
    JC hw1
    CMP AX,255
    JNE hw1    
    RET
hw1:
    LEA DX,error
    MOV endf,1
    CALL outstr
    RET
hinfow ENDP

code ENDS
END start    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -