求教:谁帮我将下列2个函数的每一行功能解释一下,在线等,谢谢了!!
我学VB的,最近要做一个解密加密程序,想参照下面的这个程序的方式进行,但这段程序我看不懂,所以来此请高手帮我。在线等
声明部分 
//二种声方法均可 
//const gamestr:string[255] = ‘N>TSVUJlwdcBMFjnAKb?qxvyeGzfLP=_ER@Z\\am]ChgoWD;QuX[< tkpr^`iIHOYs.3" (- ‘+chr(13)+‘<;‘+chr(12)+chr(00)+‘=/!,1>#2$‘+ch r(39)+‘89%‘+chr(10)+chr(9)+‘*):5&+67?40‘; 
const gamestr : array [0..127] of byte = 
($4E, $3E, $54, $53, $56, $55, $4A, $6C, $77, $64, $63, $42, $4D, $46, $6A, $6E, $41, $4B, $62, $3F, $71, $78, $76, $79, $65, $47, $7A, $66, $4C, $50, $3D, $5F, $45, $52, $40, $5A, $5C, $61, $6D, $5D, $43, $68, $67, $6F, $57, $44, $3B, $51, $75, $58, $5B, $3C, $74, $6B, $70, $72, $5E, $60, $69, $49, $48, $4F, $59, $73, $2E, $33, $1E, $01, $13, $22, $10, $0B, $28, $2D, $20, $0D, $19, $3C, $3B, $06, $11, $1C, $0C, $00, $3D, $1D, $2F, $21, $03, $02, $05, $04, $2C, $31, $3E, $23, $32, $24, $27, $38, $1F, $39, $25, $12, $0A, $09, $18, $1B, $2A, $29, $3A, $0E, $35, $07, $26, $0F, $2B, $36, $14, $37, $3F, $34, $30, $16, $08, $15, $17, $1A); 代码部分 
function decode (inchar:pchar; len:integer outchar:pchar):integer; //解密 
var 
a1, d1: byte; 
i, count, di, si :integer; 
begin 
decode := len div 4 * 3 //返回解密后数据长度 
i := 0; 
while i < len do 
begin 
d1 := byte (inchar ); 
if ( d1 = $3B ) or (d1 = $7A) then 
begin 
end; 
d1 := d1 and $0FF; 
d1 := gamestr [d1 + 05]; //d1 := byte ( gamestr [ 1 + d1 ] ); 
byte (inchar ) := d1; // 根据不同的gamestr数据定义选用不现的方法 
inc (i); 
end; di := 0 
si := 0 
count := len div 4 //循环次数 
for i := 1 to count do 
begin 
a1 := ord ( inchar [di]); //解密数据 (取4个.转化3个) 
a1 := a1 shl 2 
d1 := ord ( inchar [di + 1]); 
d1 := d1 shr 4 
a1 := a1 or d1 
outchar[si] := chr (a1); a1 := ord ( inchar [di + 1]); 
a1 := a1 shl 4 
d1 := ord ( inchar [di + 2]); 
d1 := d1 shr 2 
a1 := a1 or d1 
outchar[si + 1] := chr (a1); a1 := ord ( inchar [di + 2]); 
a1 := a1 shl 6 
d1 := ord ( inchar [di + 3]); 
a1 := a1 or d1 
outchar[si + 2] := chr (a1); di := di + 4 
si := si + 3 
end; 
end; function encode (inchar:pchar; len:integer outchar:pchar):integer; //加密 
var 
a1, d1 :byte; 
i,count,di,si :integer; begin 
encode := len div 3 * 4 //返回加密后数据长度 
di := 0 
si := 0 
count := len div 3; //定义循环次数 
for i := 1 to count do 
begin 
a1 := ord ( inchar [di]); //第一次转换 取3个 输出4个 
a1 := a1 shr 2 
outchar [si] := chr (a1); a1 := ord (inchar[di]); 
a1 := a1 and 3 
a1 := a1 shl 4 
d1 := ord (inchar[di +1]); 
d1 := d1 shr 4 
a1 := a1 or d1 
outchar[si +1] := chr (a1) a1 := ord ( inchar[di + 1]) 
a1 := a1 and $0F 
a1 := a1 shl 2 
d1 := ord ( inchar[di + 2]) 
d1 := d1 shr 6 
a1 := a1 or d1 
outchar[si + 2] := chr (a1); a1 := ord ( inchar[di + 2]) 
a1 := a1 and $3F; 
outchar[si + 3] := chr (a1) //第二次转换 
d1 := ord ( outchar [si]); //第 1 个 
d1 := gamestr [d1]; 
outchar [si] := chr (d1); d1 := ord ( outchar [si + 1]); //第 2 个 
d1 := gamestr [d1]; 
outchar [si + 1] := chr (d1); d1 := ord ( outchar [si + 2 ]); //第 3 个 
d1 := gamestr [d1]; 
outchar [si + 2] := chr (d1); d1 := ord ( outchar [si + 3]); //第 4 个 
d1 := gamestr [d1]; 
outchar [si + 3] := chr (d1); di := di + 3 
si := si + 4 
end; 
end; 

解决方案 »

  1.   

    加密:
       第一步:对加密字符串做位运算
       第二步:将字符串中的字符用gamestr数组中对应于字符串字符的ASCII码的元素替换.
          例:比如字符串中第一个字符为A,A的ASCII码值为63,那么就将第一个字符替换成gamestr[63].解密:
       第一步:判断字符是否为$3B或$7A,否的话,将字符用gamestr组数中对应ord(char)+5的元素替换.
       第二步,做加密时第一步时的逆运算.
      

  2.   

    还要没一行ord 就是取ASCII码。 []下标操作符知道吧 就是取数组某个位置的对应字符
    shr n 右移nbit  shl n 左移nbit or表示 或运算 and 表示 与 运算
    chr表示取对应ASCII码的字符。。与ord相反。。差不多了吧。。
      

  3.   

    谢谢icmfdchn 和 beyondtkl 两位,这一段里我还有点不明白
    while i < len do 
    begin 
    d1 := byte (inchar );       ????byte在这里是什么意思?
    if ( d1 = $3B ) or (d1 = $7A) then 
    begin 
    end; 
    d1 := d1 and $0FF;         
    d1 := gamestr [d1 + 05]; //d1 := byte ( gamestr [ 1 + d1 ] ); 
    byte (inchar ) := d1; // 根据不同的gamestr数据定义选用不现的方法 
    inc (i); 
    end; 
      

  4.   

    〉〉 ????byte在这里是什么意思?类型转换,如果参数是char类型的就和ord一样了