我有一个已知最大值的计数器(称为max
)。 max
可以很大(实际上它将是 36^40 - 1
或 62^40 - 1
)。
我想要一个从 [0..max]
到 [0..max]
的双射 b
具有以下属性:b(n+1)
不容易从 b(n)
猜到。
我不是在寻找加密安全函数,我只是想要尽可能多的熵来混淆计数器的输出。
该函数必须在 PHP 中可用。这允许 PHP 执行的所有功能。
最佳答案
我不认为这个问题在目前的形式下是可以回答的。判断标准
b(n+1)
is not easily guessable fromb(n)
没有明确定义。您没有给出任何度量或可量化的约束。由于您继续写道您“不正在搜索加密安全功能”并在评论中提到您“并不真正关心任何人找到该功能”,因此不清楚您为什么需要双射。
但是,这里有一些想法可以帮助您找到您满意的双射或澄清您的问题以便其他人可以提供帮助。
任何线性多项式可逆模 max
都可以。即,形式为
b(n) = a*n + b mod max
给出双射当且仅当
gcd(a,max) = 1
最简单的情况是a=1
和b=0
,所以b(n) = n
,这似乎满足你模糊的约束。
如果你喜欢它,你可以经常改变 a
和 b
,比如生成一个随机数(但一定要检查 gcd(a,max) = 1
否则你不会得到双射。
关于php - 创建双射以获得具有已知最大值的无序计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8913521/