一尘不染

整数的对称双射算法

algorithm

我需要一种算法,该算法可以将32位带符号整数一对一映射(即无冲突)。

我真正关心的是足够的熵,因此函数的输出似乎是随机的。基本上,我正在寻找一种与XOR密码类似的密码,但是它可以生成看起来更加随意的输出。安全不是我真正关心的问题,尽管默默无闻。

出于澄清目的进行编辑:

  1. 该算法 必须 是对称的,这样我就可以在没有密钥对的情况下撤消操作。
  2. 该算法 必须 是双射的,每个32位输入数字必须生成一个32位唯一数字。
  3. 该函数的输出必须足够模糊,仅在输入上添加一个会对输出产生很大影响。

预期结果示例:

F(100)= 98456
F(101)= -758
F(102)= 10875498
F(103)= 986541
F(104)= 945451245
F(105)= -488554

就像MD5一样,改变一件事情可能会改变很多事情。

我正在寻找数学函数,因此手动映射整数对我来说不是解决方案。对于那些询问的人,算法速度不是很重要。


阅读 401

收藏
2020-07-28

共1个答案

一尘不染

使用任何32位块密码!根据定义,分组密码以可逆的方式将其范围内的每个可能的输入值映射到唯一的输出值,并且根据设计,很难确定没有密钥的任何给定值将映射到什么。只需选择一个密钥,如果安全性或晦涩性很重要,就将其保密,然后使用密码作为转换即可。

有关将此概念扩展到非2的幂的范围的信息,请参阅我的关于使用分组密码进行安全置换的文章。

解决您的特定问题:

  1. 该算法确实是对称的。我不确定“没有密钥对的情况下进行反向操作”的含义。如果您不想使用密钥,请对随机生成的密钥进行硬编码,并将其视为算法的一部分。
  2. 是的-根据定义,分组密码是双射的。
  3. 对。如果不是这种情况,那将不是一个好的密码。
2020-07-28