首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加密解密

加密解密
EN

Stack Overflow用户
提问于 2015-12-03 10:23:33
回答 1查看 320关注 0票数 0

我需要重写一段旧代码的解密方法,不幸的是,原来的解密方法已经丢失了,我们只能访问加密。

代码语言:javascript
复制
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;

我尝试过一些平淡无奇的事情,比如把所有的"+“改为-”但是我没有太多的希望,因为我真的根本不理解代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-03 11:27:18

这是微型加密算法(TEA)。在维基百科上查一下。

您的解密例程应该如下所示(与命名约定保持一致,等等):

代码语言:javascript
复制
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;
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34063384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档