A. 求一匯編語言所寫簡單數據加密程序(求急,加分)
去掉了那個中斷部分。
; 本程序通過編譯,運行正確
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:顯示指定地址(Str_Addr)的字元串
; 入口:
; Str_Addr=字元串地址(要求在數據段)
; 用法: Output Str_Addr
; 用法舉例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
Encode
db
'7846302951'
Prompt_Str1 db
'Please input the orical code: $'
Prompt_Str2 db
7,13,10,13,10,'The encode: $'
Prompt_Str3 db
13,10,13,10,'Please record the encode and than press any key to continue...$'
String
db
20,?,20 p(?) ;明碼輸入緩沖區
Start:
push cs
pop ds
push cs
pop es
Output Prompt_Str1 ;提示輸入明碼
cld
lea
di,String ;明碼字元串地址
mov
cx,20 ;明碼數字個數,可以不到20個數字,回車鍵結束明碼輸入
Read_Encode:mov
ah,1
int
21h
cmp
al,13 ;回車?
jz
Disp_Encode
cmp
al,'0'
jb
Read_Encode
cmp
al,'9'
ja
Read_Encode
stosb
loop Read_Encode
Disp_Encode:mov
cx,di
sub
cx,offset String ;實際輸入的明碼數字個數
lea
si,String ;明碼字元串地址
lea
bx,Encode ;密碼地址
Encoding: lodsb ;讀入1位明碼
and
al,0fh
xlat ;查表,取得對應的密碼
mov
[si-1],al ;寫密碼
loop Encoding
mov
byte ptr [si],'$' ;顯示字元串採用DOS調用,9號功能,要求字元串以「$」結尾
Output Prompt_Str2 ;提示顯示密碼
Output String ;顯示密碼
Output Prompt_Str3 ;提示用戶記錄密碼
mov ah,1
int 21h
Exit_Proc: mov
ah,4ch ;結束程序
int
21h
Code
ENDS
END
Start ;編譯到此結束
補充回答:未知樓主要怎樣的原創,這個是我百分之百的原創。此前提供的連接,也是我百分之百的原創。不知樓主用什麼方法來判斷回答者的答案是否原創。
B. 在程序中如何將字元串常量進行加密
首先,要對這個常量字元串進行加密。
然後,加密用的密碼(密鑰)需要進行特殊處理。
比如:要保護字元串123456,用密鑰13579進行加密。
密鑰13579的16進制數組形式為:{0x31, 0x33, 0x35, 0x37, 0x39, 0x00}
你可以對這個數組進行數據干擾。比如:高位亂填數據(因為你知道是3),低位都加/減某數值:
變為了:{ 0xA3, 0xF5, 0x67, 0xD9, 0x3A, 0x00 }
你在代碼中對每一位進行恢復:
*p &= 0x0F, *p |= 0x30, *p -= 0x02,如此得到你的原始密碼:13579;
反匯編看到的你的密鑰串為:0xA3, 0xF5, 0x67, 0xD9, 0x3A, 0x00。
不知道你思路的話,只能碰運氣猜啦。
在上面兩種干擾方法基礎上,你甚至還可以把高低位調換,這樣就又加了一層干擾信息。
別人想破解也得好好猜一會了。