可搜索的随机数生成器

时间:2019-03-14 06:19:13

标签: random

是否可以找到精确的随机生成器(例如,第10004个数字始终为X,具有O(1)的存储和性能)?

var x = new RNG(99); // seed
var y = x.at(10004); // always return same value, eg. 0.34

算法或函数/公式的名称是什么?任何语言都可以。

1 个答案:

答案 0 :(得分:1)

我假设您不需要任何PRNG,只要使用种子和索引号确定性地生成数字即可。
另外,如果不进行实际计算,很难猜测输出数字。

HMAC足以满足您的要求。

H(K XOR opad, H(K XOR ipad, text))

K =键(索引)
text =消息(种子)
H =加密哈希函数
ipad = H的块字节长度的字节,其中0x36
opad = H的块字节长度的字节,其中0x5C

或者您甚至可以做

H(seed,index) //like Sha256(seed + index)

使用mod调整输出范围