我在研究QQ的TEA加密是定义了一个数组
a:array [0..15] of byte;
这里面随机生成255以内的整形数据......作为密钥........
又有了一个固定的明文数组
b:array [0..6] of byte=($01,$05,$7E,$53,$26,$01,$7F);
有定义了个数组w:array [0..23] of byte;
用于存放加密后的结果.
以下是TEA加密代码.....
我应该怎么调用这个函数呢?type
  TLongintArray = array[0..3] of Longword;
  PLongintArray = ^TLongintArray;procedure Encipher(v, k, w: PLongintArray);implementationprocedure Encipher(v, k, w: PLongintArray);
var
  y, z, a, b, c, d, sum, delta: Longword;
  n: Longint;
begin
  y := ntohl(v^[0]);
  z := ntohl(v^[1]);
  a := ntohl(k^[0]);
  b := ntohl(k^[1]);
  c := ntohl(k^[2]);
  d := ntohl(k^[3]);
  sum := 0;
  delta := $9E3779B9;
  for n := 1 to 16 do
  begin
    Inc(sum, delta);
    Inc(y, ((z shl 4) + a) xor (z + sum) xor ((z shr 5) + b));
    Inc(z, ((y shl 4) + c) xor (y + sum) xor ((y shr 5) + d));
  end;
  w^[0] := htonl(y);
  w^[1] := htonl(z);
end;

解决方案 »

  1.   

    刚看到你的站内短信。uses AdSocket;//可能需要引用这个单元.....
    .....procedure TForm1.Button1Click(Sender: TObject);
    const
      b : array [0..6] of byte=($01,$05,$7E,$53,$26,$01,$7F);
    var
      a : array [0..15] of byte;
      w : array [0..23] of byte;
    begin
      {这里是 a (以及w) 两个数组赋初值的部分。}
      Encipher(@b, @a, @w); //因为参数是指针类型,所以,把三个数组的地址作为参数
      { 此时w数组已得到了结果 }
    end;我没用过TApdSocket.htonl和TApdSocket.ntohl这两个函数,我这里也不知道怎么得到AdSocket这个单元, 所以,我没法给你调试。思路应该就是上面这样,你试一下,至于Encipher(@b,@a,@w); 这句里@b和@a两个参数的顺序,我不确定,你可以交换一下试。我无法调试啊,呵呵,只能这样回答了
      

  2.   

    我用的不是ApdSocket函数,我用的是winsock
    winsock.htohl是将内存中的倒置,就是我昨天问你的..........
    好像不能通过编译.....
    variable required