我正在寻找一个int32->int32函数,它应当: 具有双射性(一一对应) 至少在一个方向上计算简单 将递增序列0, 1, 2, 3, ... 转换成类似于良好的伪随机序列(当参数变化较小时约有一半的位翻转,没有明显的模式)
将一个大的奇数乘以另外一个不同的奇数。 双射:奇数在二次幂模下有乘法逆元,因此乘法可以通过乘上这个逆元来撤销。而异或运算当然可以通过另一个异或操作来撤销。 这基本上就是线性同余伪随机数生成器的工作原理。
也许这项任务有些过度,但你是否考虑过应用任何来自分块密码的加密伪随机置换或其他原语。例如,可以使用已知密钥的DES计数器模式来完成此操作: younumber xor (des (key, number counter))