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要反转,
请随时分享您所拥有的。
一些其他要求:
- 相同的输入总是产生相同的输出;不能有随机输出
- 无论平台如何,输出相同:windows/android/mac/ios
- 不会产生特别大的数字(适合整数)
使用散列是实现您想要的效果的一种很好的方法。下面是一个示例,它接受一个整数,将其转换为字符串,将其附加到 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;
任何人都可以分享一些常见的 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要反转, 请随时分享您所拥有的。
一些其他要求:
- 相同的输入总是产生相同的输出;不能有随机输出
- 无论平台如何,输出相同:windows/android/mac/ios
- 不会产生特别大的数字(适合整数)
使用散列是实现您想要的效果的一种很好的方法。下面是一个示例,它接受一个整数,将其转换为字符串,将其附加到 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;