我想根据输入输出随机数字。如果输入相同的输入,则给出相同的输出。
我不想预先生成并存储大量随机数据,我也不希望它花费O(n)的时间来恢复第n个索引。
不需要安全,加密或其他方式,只需要随机看。
答案 0 :(得分:1)
如果您想要从(索引,长度)对到随机查找字节字符串的确定性随机访问函数,您可以使用SHA3-N(index)[:length]
,其中N是第一个大于长度的方便数字。
这与实际数组的行为不同,因为读取索引1(长度为10)和5(长度为10)不会有任何重叠(您希望从数组中得到)。
对于N> 512来说这将是缓慢且非常不方便的,所以如果你需要更长的字符串,你将要做多轮。像SHA3-512(SHA3-512(索引)[0:256])++ SHA3-512(SHA3-512(索引)[256:512])得到的东西长达1024字节。
使用多轮部分你可以使用任何哈希函数(例如SHA256,MD5),这可能更方便。
我应该注意,这绝对不安全,并且对手很容易预测输出。
答案 1 :(得分:0)
通常,随机数生成器generate the same sequence of pseudo-random numbers given the same seed。例如,这样的python代码可能是这样的:
random.seed(1)
for i in range(1, 10):
print(random.randint(1,100)
无论您调用该代码多少次,都会打印相同的列表。同样,这也是:
random.seed(42)
for i in range(1, 10):
print(random.randint(1,100)
如果你以某种方式将数组的各个部分描述为种子(你可以使用哈希函数来实现这一点),你可以使用该值为生成器设定种子,并可靠地允许动态调整所请求列表的大小。