我需要为旧的代码重写一个解密方法,遗憾的是原始的解密方法已经丢失,因为我们只能访问加密.
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;
我已经尝试过将所有"+"改为" - "等平凡的事情,但是我并没有太大的希望,因为我根本不理解代码.
这是微型加密算法(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;