整数的对称双射算法

我需要一种可以将32位有符号整数映射到另一个32位有符号整数的一对一映射(即不发生冲突)的算法。

我真正关心的是足够的熵,使得函数的输出看起来是随机的。 基本上我在寻找一个类似于XOR密码的密码,但是它可以产生更多的任意输出。 安全并不是我真正关心的问题,尽管隐晦是。

编辑澄清目的:

  • 该算法必须是对称的,这样我才能在没有密钥对的情况下反转操作。
  • 该算法必须是双射的,每个32位输入数字必须生成一个32位唯一编号。
  • 函数的输出必须足够清晰,只在输入中添加一个应该会对输出产生很大影响。
  • 预期结果示例:

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

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

    我正在寻找一个数学函数,所以手动映射整数对我来说不是一个解决方案。 对于那些问,算法速度并不是很重要。


    使用任何32位块密码! 根据定义,分组密码将其范围内的每个可能的输入值映射到唯一的输出值,并且通过设计,很难确定任何给定值将在没有密钥的情况下映射到哪个值。 只需选择一个密钥,如果安全性或默认值很重要,请保密,并使用密码作为转换。

    要将这个想法扩展到2的非功耗范围,请参阅我的帖子关于使用分组密码的安全排列。

    解决您的具体问题:

  • 该算法确实是对称的。 我不确定你的意思是“在没有密钥对的情况下反转操作”。 如果您不想使用密钥,请对随机生成的密钥进行硬编码,并将其视为算法的一部分。
  • 是的 - 根据定义,分组密码是双射的。
  • 对。 如果情况并非如此,那将不是一个好的密码。

  • 我将尝试用一个更简单的例子来解释我的解决方案,然后可以很容易地扩展你的大型例子。

    说我有一个4位数字。 有16个不同的值。 看它就好像它是一个四维立方体:4维立方体http://www.ams.org/featurecolumn/images/january2009/klee8.jpg。

    每个顶点代表这些数字中的一个,每一位代表一个维度。 所以它的基本XYZW,其中每个维度可以只有值0或1.现在想象你使用不同的维度顺序 。 例如XZYW。 现在每个顶点都改变了它的编号!

    您可以对任意数量的维度执行此操作,只需对这些维度进行排列即可。 如果安全不是你关心的话,这对你来说可能是一个很好的快速解决方案。 另一方面,我不知道输出是否足够满足您的需求,当然在完成大量映射后,映射可以颠倒过来(根据您的需求,这可能是一种优势或劣势)。


    以下文章为您提供了4或5个映射示例,为您提供了功能而不是构建映射集:www.cs.auckland.ac.nz/~john-rugis/pdf/BijectiveMapping.pdf

    链接地址: http://www.djcxy.com/p/6359.html

    上一篇: Symmetric Bijective Algorithm for Integers

    下一篇: Scikit Image Marching Cubes