Algorithm Delphi函数,它接受整数并返回一个不太容易解码的整数
任何人都可以分享一个函数的一些常见的Delphi示例吗 返回一个不太明显的数字 例如:Algorithm Delphi函数,它接受整数并返回一个不太容易解码的整数,algorithm,delphi,pascal,Algorithm,Delphi,Pascal,任何人都可以分享一个函数的一些常见的Delphi示例吗 返回一个不太明显的数字 例如: function GetNumber(const aSeed: Integer): Integer; begin Result := ((aSeed+5) * aSeed) + 15; end; 假设用户知道发送aSeed=21得到561 和aSeed=2,给出29 等等 是否有一个函数使得代码很难进行反向工程, 即使可以生成大量种子/结果集? (难:我不是说不可能,只是需要不平凡) 最好是不允许函数内
function GetNumber(const aSeed: Integer): Integer;
begin
Result := ((aSeed+5) * aSeed) + 15;
end;
假设用户知道发送aSeed
=21得到561
和aSeed
=2,给出29
等等
是否有一个函数使得代码很难进行反向工程,
即使可以生成大量种子/结果集?
(难:我不是说不可能,只是需要不平凡)
最好是不允许函数内结果超过
结果也是整数
在任何情况下,如果您不确定是否很难/不可能逆转,
请随意分享你所拥有的
其他一些要求:
- 相同的输入总是导致相同的输出;不能有随机输出
- 无论平台:windows/android/mac/ios,输出相同
- 不会产生非常大的数字(适合整数)
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;
你问的是散列。@RonMaupin我不认为OP想要散列。散列不是可逆的过程。他想要的是模糊处理或加密。对于哪类人来说,逆向工程应该是不平凡的?用例是什么?您是否希望将模糊编号存储在数据库中,然后将其取回,同时不希望有人理解您在数据库中编写的内容?或者你可以将号码发送到另一个系统,而该系统必须将原始号码取回?如果你解释你想做什么,你会得到更好的建议…密码学界有很多解决方案。他们通常用一个密钥加密,用另一个或同一个密钥解密。公钥加密和非公钥加密有对称加密和非对称加密两种。这里有很多选项来解释一切,特别是如果我们不知道你的真正问题。我尝试根据ID获得一个非随机数(ID对于我来说太明显了)。我不需要将结果恢复到原始ID,但我只是不想让人们知道我是如何得到结果数字的(尽可能多)。在本例中不寻找散列。感谢提供此示例。非常感谢。如果有人能开导我的话,那么这两行P:=@Hash[0];结果:=Abs(P^);这如何给出前4个字节的整数?别误会,我不是在怀疑答案,只是我没有足够的专家来阅读这段代码。@PeterJones
P
持有一个指向整数的指针@Hash[0]
是哈希数组开头的地址。通过将该地址分配给P
并取消对P
的引用,可以得到存储在数组开头的整数。查看更多详细信息。