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)) 不太明白是什么意思.

解决方案 »

  1.   

    第一个byte类型的数组,其中值只能是$B2,$09,$AA,$55,$93,$6D,$84,$47
      

  2.   

    inttohex好像是整数转16进制的字符串,第二个参数是返回的字符串长度?
    整数是把每个字节与key的每个字节循环异或
      

  3.   

    byte(str[i])代表把字符str[i]转换成字节型数字,delphi中字符不能参加运算。
    这个异或是比较XorKey(八字节一循环)和Str各位是否相同,然后按位输出。
      

  4.   

    array[0..7] of Byte :定义byte类型的数组  byte 和 integer 都是属于基本类型;
    inttohex :把数字类型转换到16位形式;其中括号里面的是 进行异或操作;
      

  5.   

    array[0..7] of Byte: 一个Byte类型的数组,数组包含8个元素,下标(元素序号)是0到7。
    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为
    ## ## ## ## ## ## ## ## ## ## ## ##
    转换后就是
    ## ## ## ## ## ## ## ## ## ## ## ##开个玩笑。你自己做一些试验就知道了,要想理解一段程序的意思,最好的办法是用单步跟踪的方法,自己试验。