我有一个“线性同余生成器”,它为我的 2.faze Auth 生成随 secret 钥。我基本上需要有一个种子,我将在客户端和服务器上生成一个 key ,这样我就不必发送它了。
问题是如果用户长时间不使用客户端,则在获取当前 key 之前必须生成大量 key 。公式是
s1 = (a * s0 + 2) mod m
我需要这个序列的第 n 个成员。
最佳答案
首先,用于身份验证的 LCG,真的吗?这对我来说是个坏主意......
但无论如何,回到问题:
s(i+1) = (a*s(i) + 2) mod m
s(i+2) = (a*(a*s(i) + 2) + 2) mod m = a^2*s(i) + 2*(a+1) mod m
s(i+4) = (a^2*(a^2*s(i) + a*2+2) + a*2+2) mod m = a^4*s(i) + 2*(a^3+a^2+a+1) mod m
并通过递归
s(i+2^n) = a^2^n * s(i) + 2*(a^2^n-1)/(a-1)
然后要快进n
步,只需将n
写成二进制,用上面的公式做成log_2(n)
步骤。
关于algorithm - 得到 x。 "Linear Congruential Generator"的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58406874/