Delphi 接受 Integer 和 returns 一个不太容易解码的 Integer 的函数

Delphi Function that takes Integer and returns a not-so-easily decoded Integer

任何人都可以分享一些常见的 Delphi 接受数字的函数示例吗 和 returns 一个不那么明显的数字?

例如:

function GetNumber(const aSeed: Integer): Integer;
begin
  Result := ((aSeed+5) * aSeed) + 15;
end;

所以假设用户知道发送 aSeed = 21 会得到 561 和 aSeed = 2,给出 29 等等...

是否有一个函数使得难以对代码进行逆向工程, 即使可以生成大量 Seed/Result 集? (困难:我不是说不可能,只是需要不平凡)

最好是不允许函数结果超过 也是整数结果。

无论如何,如果您不确定是否hard/impossible要反转, 请随时分享您所拥有的。

一些其他要求:

使用散列是实现您想要的效果的一种很好的方法。下面是一个示例,它接受一个整数,将其转换为字符串,将其附加到 salt,计算 MD5 和 returns 对应于前 4 个字节的整数:

uses
  System.Hash;

function GetHash(const s: string): TBytes;
var
  MD5: THashMD5;
begin
  MD5 := THashMD5.Create;
  MD5.Update(TEncoding.UTF8.GetBytes(s));
  Result := MD5.HashAsBytes;
end;

function GetNumber(Input: Integer): Integer;
var
  Hash: TBytes;
  p: ^Integer;
begin
  Hash := GetHash('secret' + IntToStr(Input));
  P := @Hash[0];
  Result := Abs(P^);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(GetNumber(1))); // 996659739
  ShowMessage(IntToStr(GetNumber(2))); // 939216101
  ShowMessage(IntToStr(GetNumber(3))); // 175456750
end;