伪随机的一对一int32->int32函数

7

我正在寻找一个int32->int32函数,它应当:

  • 具有双射性(一一对应)
  • 至少在一个方向上计算简单
  • 将递增序列0, 1, 2, 3, ... 转换成类似于良好的伪随机序列(当参数变化较小时约有一半的位翻转,没有明显的模式)

你尝试过什么吗? - Hunter McMillen
3
类似问题:混淆ID - Evgeny Kluev
“Cheap”有多便宜?任何合理的分组密码都应该提供您的伪随机/位翻转需求。 - Jason Malinowski
2个回答

10

将一个大的奇数乘以另外一个不同的奇数。

双射:奇数在二次幂模下有乘法逆元,因此乘法可以通过乘上这个逆元来撤销。而异或运算当然可以通过另一个异或操作来撤销。

这基本上就是线性同余伪随机数生成器的工作原理。


3

也许这项任务有些过度,但你是否考虑过应用任何来自分块密码的加密伪随机置换或其他原语。例如,可以使用已知密钥的DES计数器模式来完成此操作:

younumber xor (des (key, number counter))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接