当前位置:  开发笔记 > 人工智能 > 正文

从加密方法解密

如何解决《从加密方法解密》经验,为你挑选了1个好方法。

我需要为旧的代码重写一个解密方法,遗憾的是原始的解密方法已经丢失,因为我们只能访问加密.

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;

我已经尝试过将所有"+"改为" - "等平凡的事情,但是我并没有太大的希望,因为我根本不理解代码.



1> Jannie Gerbe..:

这是微型加密算法(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;

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有