const
DEFAULT_M: array [0..lF] of byte =
(l1, l6, lF, l8, l8, lC, l0, lD,l2, l3, l01, ldf, lss, ldd, ld1, ld8);
procedure inBuf(var Buf: array of Byte);
var
i: Integer;
d, c: byte;
Index: Integer;
begin
d := 0;
c := 0;
for i:= low(Buf) to High(Buf) do
begin
Index:= i mod 16;
d := DEFAULT_M[Index];
d := d+c;
c := byte(Buf[i]);
c := c xor d;
Buf[i] := c;
end;
end;
因为不会这个语言,所以看这个算法很久没有明白,请大家分析一下。
这个加密的,要怎么解密
DEFAULT_M: array [0..lF] of byte =
(l1, l6, lF, l8, l8, lC, l0, lD,l2, l3, l01, ldf, lss, ldd, ld1, ld8);
procedure inBuf(var Buf: array of Byte);
var
i: Integer;
d, c: byte;
Index: Integer;
begin
d := 0;
c := 0;
for i:= low(Buf) to High(Buf) do
begin
Index:= i mod 16;
d := DEFAULT_M[Index];
d := d+c;
c := byte(Buf[i]);
c := c xor d;
Buf[i] := c;
end;
end;
因为不会这个语言,所以看这个算法很久没有明白,请大家分析一下。
这个加密的,要怎么解密
const // 这个常量数组声明定义都错了,1f显示是16进制,应该是$1f
DEFAULT_M: array [0..lF] of byte =
(l1, l6, lF, l8, l8, lC, l0, lD,l2, l3, l01, ldf, lss, ldd, ld1, ld8); // 这些值显然乱写的,打个比方用的吧
begin
d := 0;
c := 0;
for i:= low(Buf) to High(Buf) do // 循环整个buf
begin
Index:= i mod 16; // index = i%16
d := DEFAULT_M[Index];
d := d+c;
c := byte(Buf[i]);
c := c xor d; // c = c^d;
Buf[i] := c;
end;
数组Buf是被处理的数组。
上一次被处理的结果c和本次用于加密的字节相加得到本次用于加密的系数,新的系数于本次需要加密字节求模得到本次处理结果。
用上次结果和本次用于加密的字节相加就得到用于异或的系数,然后和本次结果异或就解密了。
procedure inBuf(var Buf: array of Byte);
var
i: Integer;
d, c: byte;
Index: Integer;
begin
d := 0;
c := 0;
for i:= low(Buf) to High(Buf) do
begin
Index:= i mod 16;
d := DEFAULT_M[Index];
d := d+c;
c := byte(Buf[i]);
Buf[i] := c xor d;
end;
end;
和加密的只有很少的变化。