我需要重写一段旧代码的解密方法,不幸的是,原来的解密方法已经丢失了,我们只能访问加密。
type
TintArray = array [0 .. 1] of Cardinal;
TKeyArray = Array [0 .. 3] of Cardinal;
const
KeyArray: TKeyArray = (858945348, 1144282739, 828794915, 556884274);
procedure Encipher(var V, W: TintArray);
var
y, z, sum, delta, a, b, c, d, n: Cardinal;
iCounter: Integer;
begin
y := V[0];
z := V[1];
sum := 0;
delta := $9E3779B9; // 2654435769;//0x9E3779B9;
a := KeyArray[0];
b := KeyArray[1];
c := KeyArray[2];
d := KeyArray[3];
n := 32;
for iCounter := n downto 1 do begin
sum := sum + delta;
y := y + (((z shl 4) + a) xor (z + sum) xor ((z shr 5) + b));
z := z + (((y shl 4) + c) xor (y + sum) xor ((y shr 5) + d));
end;
W[0] := y;
W[1] := z;
end;我尝试过一些平淡无奇的事情,比如把所有的"+“改为-”但是我没有太多的希望,因为我真的根本不理解代码。
发布于 2015-12-03 11:27:18
这是微型加密算法(TEA)。在维基百科上查一下。
您的解密例程应该如下所示(与命名约定保持一致,等等):
procedure Decipher(var V, W: TintArray);
var
y, z, sum, delta, a, b, c, d, n: Cardinal;
iCounter: Integer;
begin
y := V[0];
z := V[1];
sum := $C6EF3720;
delta := $9E3779B9; // 2654435769;//0x9E3779B9;
a := KeyArray[0];
b := KeyArray[1];
c := KeyArray[2];
d := KeyArray[3];
n := 32;
for iCounter := n downto 1 do begin
z := z - (((y shl 4) + c) xor (y + sum) xor ((y shr 5) + d));
y := y - (((z shl 4) + a) xor (z + sum) xor ((z shr 5) + b));
sum := sum - delta;
end;
W[0] := y;
W[1] := z;
end;https://stackoverflow.com/questions/34063384
复制相似问题