我想输出基于输入的随机看起来的数字。如果输入相同的内容,则会给出相同的输出。
我不想预先生成和存储一堆随机数据,也不想花费O(n)时间来恢复第n个索引。
它不需要是安全的、加密的或其他的,只要看起来是随机的即可。
发布于 2018-06-10 05:47:52
如果您想要一个从(索引,长度)对到随机查找的字节字符串的确定性随机访问函数,您可以使用SHA3-N(index)[:length]
,其中N是第一个大于长度的方便数字。
这与实际的数组表现不同,因为读取索引1(长度为10)和索引5(长度为10)不会有任何重叠(这是您在数组中所期望的)。
这会很慢,而且对N>512来说非常不方便,所以如果你需要更长的字符串,你会想要做多轮。像SHA3-512(SHA3-512(index)0:256)++SHA3-512(SHA3-512(index)256:512)这样的代码来获取1024字节长的内容。
有了多轮部分,你可以使用任何哈希函数(例如SHA256,MD5),这可能更方便。
我应该指出,这肯定是不安全的,并且输出很容易被对手预测到。
发布于 2018-06-10 05:52:32
通常,随机数生成器将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)
如果您随后以某种方式将数组的各个部分描述为种子(您确实可以使用哈希函数来实现此目的),则可以使用该值作为生成器的种子,并可靠地允许动态调整请求列表的大小。
https://stackoverflow.com/questions/50778628
复制相似问题