TEA加密有关问题
TEA加密问题
我在研究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);
implementation
procedure 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;
------解决方案--------------------
刚看到你的站内短信。
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两个参数的顺序,我不确定,你可以交换一下试。
我无法调试啊,呵呵,只能这样回答了
我在研究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);
implementation
procedure 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;
------解决方案--------------------
刚看到你的站内短信。
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两个参数的顺序,我不确定,你可以交换一下试。
我无法调试啊,呵呵,只能这样回答了