const
XorKey:array[0..7] of Byte=($B2,$09,$AA,$55,$93,$6D,$84,$47);
中的of byte是什么类型?function TForm1.Enc(Str:String):String;
var
i,j:Integer;
begin
Result:='';
j:=0;
for i:=1 to Length(Str) do
begin
Result:=Result+IntToHex(Byte(Str[i]) xor XorKey[j],2);
j:=(j+1) mod 8;
end;
end; 中的inttohex(byte(str[i]) xor xorkey[j],2)) 不太明白是什么意思.
XorKey:array[0..7] of Byte=($B2,$09,$AA,$55,$93,$6D,$84,$47);
中的of byte是什么类型?function TForm1.Enc(Str:String):String;
var
i,j:Integer;
begin
Result:='';
j:=0;
for i:=1 to Length(Str) do
begin
Result:=Result+IntToHex(Byte(Str[i]) xor XorKey[j],2);
j:=(j+1) mod 8;
end;
end; 中的inttohex(byte(str[i]) xor xorkey[j],2)) 不太明白是什么意思.
整数是把每个字节与key的每个字节循环异或
这个异或是比较XorKey(八字节一循环)和Str各位是否相同,然后按位输出。
inttohex :把数字类型转换到16位形式;其中括号里面的是 进行异或操作;
Byte是一种数据类型,即所谓的字节,宽度为8个二进制位。
Byte与Char类似,宽度是8个二进制位,只不过Byte是数字,Char是字符。IntToHex函数可以看Delphi的帮助。异或操作(xor):
首先说一下1和0的异或,简单来讲就是:两个位相同,结果为0;两个位不同,结果为1。所以称为异或。也就是
0 xor 0 = 0
1 xor 1 = 0
0 xor 1 = 1
1 xor 0 = 1两个字节(Byte)的异或,就是把两个字节中对应的位进行异或得到的结果。比如
$A2 xor $28 = $8A
($A2 = 10100010, $28 = 00101000)$AA xor $AA = $00
$AA xor $FF = $55
(两个相同的字节异或,结果为0;一个字节与$FF异或,相当于对字节取反)所以,你这段程序的意思是,用XorKey这个数组中的八个字节,对字符串Str中个各个字符依次进行异或操作(异或前当然要将Str中的字符强制转换为Byte类型,否则Delphi编译会报错),将结果再以字符串形式(通过IntToHex转换)保存到Result中。如果字符串Str长度大于8,就循环重复使用XorKey。比如,你的原始字符串Str为
## ## ## ## ## ## ## ## ## ## ## ##
转换后就是
## ## ## ## ## ## ## ## ## ## ## ##开个玩笑。你自己做一些试验就知道了,要想理解一段程序的意思,最好的办法是用单步跟踪的方法,自己试验。