|
加密/解密是一门技术很高的学科.我不懂,所以这样说,实际上也是吧?我没学过这方面的知识,但有兴趣,所以先以最简单的开始.
用位运算的异或来对文件加密,再异或一次就还原.
好了,废话少说,下面是一个用汇编写的简单文件加密程序.
- ;******************************************
- title 文件加密/解密程序
- ;******************************************
- data segment
- seed db ?
- handle dw ?
- bufferSize db 13
- nameLen db ?
- fileName db 14 dup(0)
- tips db 'Please input the name of the encode/decode file!',0ah,0dh,'$'
- seedMSG db 'Please input the number for encode/decode(such as 123)(<=255)',0ah,0dh,'$'
- errorMSG db 0ah,0dh,'error','$'
- buf db 256 dup(?)
- len dw ?
- fileLen dw 0
- data ends
- code segment
- assume cs:code,ds:data
- chooseFile proc
- start: mov ax,data
- mov ds,ax
-
- mov ah,09h
- lea dx,tips
- int 21h
- mov ah,0ah
- lea dx,bufferSize
- int 21h
- mov bh,0
- mov bl,nameLen
- mov fileName[bx],0
- lea dx,fileName
- mov ax,3d02h ;AL=0为读文件,AH=3DH是功能号
- int 21h
- jc error ;若打开出错,转到去打开默认文件
- mov Handle,ax
- ;输入加密密钥
- mov ah,09h
- lea dx,seedMSG
- int 21h
- mov ah,0ah
- lea dx,bufferSize ;为节省,用fileName
- int 21h
- cmp nameLen,4
- jnb error ;大于四则为错误输入
- mov bh,0
- mov bl,nameLen
- mov fileName[bx],0
- mov fileName[bx+1],10
- mov fileName[bx+2],20 ;这三个设置使无输入时也有0,10,20值
- lea di,fileName
- sub [di],30h ;下面是转换数字,但可能溢出,且不管了.
- mov ah,100
- mov al,[di]
- mul ah
- mov bx,ax
- sub [di],30h
- mov ah,10
- mov al,[di+1]
- mul ah
- add bx,ax
- add al,[di+2]
- sub al,30h
- mov seed,al
-
- read: mov bx,Handle
- lea dx,buf
- mov cx,255 ;指定读文件字节数
- mov ah,3fh
- int 21h
- jc error
- cmp ax,0
- jz over
- mov len,ax ;ax=实际读到的字符数
- mov cx,len ;加密
- lea di,buf
- mov al,seed
- encode: xor [di],al
- inc di
- loop encode
- ;CX=0,移动文件指针
- mov dx,fileLen ;cx:dx为文件指针移动长度
- mov ax,4200h
- int 21h
- mov cx,len ;加密后写入文件
- mov bx,handle
- lea dx,buf
- mov ah,40h ;写文件
- int 21h
- jc error
- mov ax,len
- add fileLen,ax
- jmp read
- error:
- lea dx,errorMSG
- mov ah,09h
- int 21h
- over: mov ah,4ch
- int 21h
- chooseFile endp
- code ends
- end start
复制代码
以上程序只对文本文件的加密/解密测试通过.汇编用DOS中断调用能能不能对二进制文件操作呢?好像不能.更高级的方法应该可以实现(可我不会).如果用C,C++或JAVA就可以比较容易实现对二进制文件进行加密/解密了.
(待续...) |
|