整数的对称双射算法
我需要一种可以将32位有符号整数映射到另一个32位有符号整数的一对一映射(即不发生冲突)的算法。
我真正关心的是足够的熵,使得函数的输出看起来是随机的。 基本上我在寻找一个类似于XOR密码的密码,但是它可以产生更多的任意输出。 安全并不是我真正关心的问题,尽管隐晦是。
编辑澄清目的:
预期结果示例:
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